回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我尝试用Python中的<code>multiprocessing</code>包开发一个算法,我从internet上学习了一些教程,并尝试用这个包开发一个算法。环顾四周,使用<code>Process</code>、<code>Queue</code>和<code>Pool</code>尝试“hello world”之后,我尝试在此代码上实现队列</p>
<pre><code>def main(queue):
d = ...
k = ...
filename, patname, txt, pat = ...
R = queue
processes = []
for j in range(k-1):
processes.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(Process(target=sim, args=(int(j * d), int((j+1) * d), txt, pat, filename, patname, R, )))
# processes.append(Process(target=sim, args=(int(j * d), len(txt), txt, pat, filename, patname, R, )))
for pr in processes:
pr.start()
for pr in processes:
pr.join()
while not R.empty():
print (R.get())
if __name__ == '__main__':
R = Queue()
main(R)
</code></pre>
<p>但是,错误是这样的:</p>
<pre><code>AssertionError: Cannot start a process twice
</code></pre>
<p>有人能帮忙解决这个问题吗</p>
<p>全部输出:</p>
<pre><code>sim(e_original.txt, e_modify0%.txt) = 0.000000
sim(e_original.txt, e_modify0%.txt) = 0.000000
1
Traceback (most recent call last):
File "measure.py", line 108, in <module>
main()
File "measure.py", line 98, in main
pr.start()
File "C:\Python27\lib\multiprocessing\process.py", line 120, in start
assert self._popen is None, 'cannot start a process twice'
AssertionError: cannot start a process twice
sim(e_original.txt, e_modify0%.txt) = 0.000000
</code></pre>