Pythonマルチプロセッシングと混同しています。
データベースから文字列を処理する関数を高速化しようとしていますが、関数が「通常の処理」よりもワーカーのプールに渡されると時間がかかるため、マルチプロセッシングがどのように機能するかを誤解したに違いありません。
これが私が達成しようとしていることの例です。
from time import clock, time
from multiprocessing import Pool, freeze_support
from random import choice
def foo(x):
TupWerteMany = []
for i in range(0,len(x)):
TupWerte = []
s = list(x[i][3])
NewValue = choice(s)+choice(s)+choice(s)+choice(s)
TupWerte.append(NewValue)
TupWerte = tuple(TupWerte)
TupWerteMany.append(TupWerte)
return TupWerteMany
if __name__ == '__main__':
start_time = time()
List = [(u'1', u'aa', u'Jacob', u'Emily'),
(u'2', u'bb', u'Ethan', u'Kayla')]
List1 = List*1000000
# METHOD 1 : NORMAL (takes 20 seconds)
x2 = foo(List1)
print x2[1:3]
# METHOD 2 : APPLY_ASYNC (takes 28 seconds)
# pool = Pool(4)
# Werte = pool.apply_async(foo, args=(List1,))
# x2 = Werte.get()
# print '--------'
# print x2[1:3]
# print '--------'
# METHOD 3: MAP (!! DOES NOT WORK !!)
# pool = Pool(4)
# Werte = pool.map(foo, args=(List1,))
# x2 = Werte.get()
# print '--------'
# print x2[1:3]
# print '--------'
print 'Time Elaspse: ', time() - start_time
私の質問:
- apply_asyncが「通常の方法」よりも時間がかかるのはなぜですか?
- マップで何が間違っているのですか?
- マルチプロセッシングを使用してこのようなタスクを高速化することは理にかなっていますか?
- 最後に:ここで読んだ後、PythonでのマルチプロセッシングがWindowsで機能するかどうか疑問に思っていますか?