Tôi đang cố triển khai tính năng đa xử lý này tutorial cho mục đích của riêng tôi. Lúc đầu, tôi nghĩ rằng nó đã không quy mô tốt, nhưng khi tôi thực hiện một ví dụ tái sản xuất tôi thấy rằng nếu danh sách các mục đi trên 124, có vẻ như không bao giờ trả lời một câu trả lời. Tại x = 124
nó chạy trong .4 giây, nhưng khi tôi đặt nó là x = 125
nó không bao giờ kết thúc. Tôi đang chạy Python 2.7 trên Windows 7.Xử lý đa xử lý Python> = 125 danh sách không bao giờ kết thúc
from multiprocessing import Lock, Process, Queue, current_process
import time
class Testclass(object):
def __init__(self, x):
self.x = x
def toyfunction(testclass):
testclass.product = testclass.x * testclass.x
return testclass
def worker(work_queue, done_queue):
try:
for testclass in iter(work_queue.get, 'STOP'):
print(testclass.counter)
newtestclass = toyfunction(testclass)
done_queue.put(newtestclass)
except:
print('error')
return True
def main(x):
counter = 1
database = []
while counter <= x:
database.append(Testclass(10))
counter += 1
print(counter)
workers = 8
work_queue = Queue()
done_queue = Queue()
processes = []
start = time.clock()
counter = 1
for testclass in database:
testclass.counter = counter
work_queue.put(testclass)
counter += 1
print(counter)
print('items loaded')
for w in range(workers):
p = Process(target=worker, args=(work_queue, done_queue))
p.start()
processes.append(p)
work_queue.put('STOP')
for p in processes:
p.join()
done_queue.put('STOP')
newdatabase = []
for testclass in iter(done_queue.get, 'STOP'):
newdatabase.append(testclass)
print(time.clock()-start)
print("Done")
return(newdatabase)
if __name__ == '__main__':
database = main(124)
database2 = main(125)
Nó phù hợp với tôi. – Veedrac
ông đã đăng một câu hỏi khác ở đây làm việc cho tôi. http://stackoverflow.com/questions/19070638/python-multiprocessing-ioerror-errno-232-the-pipe-is-being-closed#comment28188856_19070638 –
Tôi đã khắc phục sự cố trong bài đăng khác. Tôi đã thử chạy mã trên trên cả hai máy tính của tôi và trên cả hai nó treo ở cuối khi 'x = 125' và không bao giờ in Done. – Michael