python-并行开发

code_len = len(codes)
cpus = os.cpu_count()
per_thread_cnt = int(code_len / cpus)
code_len = len(codes)
cpus = os.cpu_count()
if cpus is None:
cpus = 8
futures = []
with concurrent.futures.ProcessPoolExecutor(max_workers=cpus) as executor:
for i in range(0, cpus):
stop = per_thread_cnt * (i + 1)
if i == cpus - 1:
stop = code_len
code_list = codes[per_thread_cnt * i:stop]
futures.append(executor.submit(screen_stock_work,json_param, code_list))

for future in concurrent.futures.as_completed(futures):
try:
data = future.result()
for it in data:
nngPair.send(bytes(json.dumps({'CmdType': CMD_SCREEN_LIST_RESULT, 'Param': it}), encoding='utf-16')[2:])
except Exception as exc:
print('generated an exception: %s' % ( exc))

msg = {'CmdType': CMD_SCREEN_DONE, 'Param': f'{code_len}'}
nngPair.send(bytes(json.dumps(msg), encoding='utf-16')[2:])
flag &= (~FLAG_SCREEN_LIST_START)