マルチプロセッシングに頭を悩ませようと多くの時間を費やした後、ベンチマーク テストである次のコードを思いつきました。
例 1:
from multiprocessing import Process
class Alter(Process):
def __init__(self, word):
Process.__init__(self)
self.word = word
self.word2 = ''
def run(self):
# Alter string + test processing speed
for i in range(80000):
self.word2 = self.word2 + self.word
if __name__=='__main__':
# Send a string to be altered
thread1 = Alter('foo')
thread2 = Alter('bar')
thread1.start()
thread2.start()
# wait for both to finish
thread1.join()
thread2.join()
print(thread1.word2)
print(thread2.word2)
これは 2 秒で完了します (マルチスレッドの半分の時間)。好奇心から、次にこれを実行することにしました。
例 2:
word2 = 'foo'
word3 = 'bar'
word = 'foo'
for i in range(80000):
word2 = word2 + word
word = 'bar'
for i in range(80000):
word3 = word3 + word
print(word2)
print(word3)
恐ろしいことに、これは 0.5 秒もかからずに実行されました。
ここで何が起こっているのですか?例 1 が例 2 の 2 つのプロセスに分割されていることを考えると、例 2 の半分の時間で完了するはずではありませんか?
アップデート:
Chris のフィードバックを検討した後、最も多くの処理時間を消費する「実際の」コードを含め、マルチプロセッシングを検討するように導きました。
self.ListVar = [[13379+ strings],[13379+ strings],
[13379+ strings],[13379+ strings]]
for b in range(len(self.ListVar)):
self.list1 = []
self.temp = []
for n in range(len(self.ListVar[b])):
if not self.ListVar[b][n] in self.temp:
self.list1.insert(n, self.ListVar[b][n] + '(' +
str(self.ListVar[b].count(self.ListVar[b][n])) +
')')
self.temp.insert(0, self.ListVar[b][n])
self.ListVar[b] = list(self.list1)