我想通过启动几个独立的异步操作线程来加速脚本的执行,否则这些线程会一个接一个地启动。
我使用了 concurrent.future 文档中的示例并将其改编为我的代码:
import concurrent.futures
def myfunc(elem):
elem['ascii'] = ord(elem['name'])
mylist = [
{'name': 'a'},
{'name': 'b'},
{'name': 'c'},
{'name': 'd'},
{'name': 'e'}
]
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
future_to_url = {executor.submit(myfunc, elem): elem for elem in mylist}
for future in concurrent.futures.as_completed(future_to_url):
try:
future.result()
except Exception as exc:
print('error: '.format(exc))
print mylist
代码按预期工作,但我是否应该担心并发访问mylist
或是否正确锁定并以串行方式访问(或任何正确的数据以保持一致)?
在实际程序中,字典会更大,我想启动约 500 名工人。