5

スクリプトの実行を高速化するには、別の方法では次々に起動される独立した非同期操作の複数のスレッドを起動します。

私は、concurrent.future docs の例を使用して、自分のコードに適合させました。

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 個のワーカーを起動したいと考えています。

4

1 に答える 1