Tôi muốn một quy trình chạy dài để trả lại tiến trình của nó trên một Hàng đợi (hoặc một thứ gì đó tương tự) mà tôi sẽ chuyển đến hộp thoại thanh tiến trình. Tôi cũng cần kết quả khi quá trình hoàn tất. Ví dụ kiểm tra ở đây không thành công với số RuntimeError: Queue objects should only be shared between processes through inheritance
.Làm thế nào để bạn chuyển một tham chiếu Queue đến một hàm được quản lý bởi pool.map_async()?
import multiprocessing, time
def task(args):
count = args[0]
queue = args[1]
for i in xrange(count):
queue.put("%d mississippi" % i)
return "Done"
def main():
q = multiprocessing.Queue()
pool = multiprocessing.Pool()
result = pool.map_async(task, [(x, q) for x in range(10)])
time.sleep(1)
while not q.empty():
print q.get()
print result.get()
if __name__ == "__main__":
main()
tôi đã có thể để có được điều này để làm việc sử dụng đối tượng Process cá nhân (nơi tôi đang alowed để vượt qua một tham chiếu Queue) nhưng sau đó tôi không có một hồ bơi để quản lý các quá trình nhiều Tôi muốn để khởi chạy. Bất kỳ tư vấn về một mô hình tốt hơn cho điều này?
Nó không phải là câu trả lời cho câu hỏi của bạn, nhưng hãy thử thư viện 'execnet' để ánh xạ đa tiến trình. Việc xử lý 'multiprocessing' được tích hợp sẵn có một số vấn đề vẫn được sửa (xem bộ theo dõi Python). Bên cạnh đó mã nguồn của nó khá lớn và phức tạp. Thư viện 'execnet' trông tốt hơn tôi nhiều so với' multiprocessing'. –