คำถามติดแท็ก python-multiprocessing

8
หลามมัลติโพรเซสซิง PicklingError: ไม่สามารถดอง <type 'function'>
ฉันขอโทษที่ฉันไม่สามารถทำซ้ำข้อผิดพลาดด้วยตัวอย่างที่ง่ายขึ้นและรหัสของฉันซับซ้อนเกินกว่าจะโพสต์ ถ้าฉันรันโปรแกรมใน IPython shell แทนที่จะเป็น Python ปกติสิ่งต่าง ๆ ก็ใช้ได้ดี ฉันค้นหาบันทึกย่อก่อนหน้านี้เกี่ยวกับปัญหานี้ พวกเขาทั้งหมดเกิดจากการใช้พูลเพื่อเรียกใช้ฟังก์ชันที่กำหนดไว้ในฟังก์ชันคลาส แต่นี่ไม่ใช่กรณีสำหรับฉัน Exception in thread Thread-3: Traceback (most recent call last): File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner self.run() File "/usr/lib64/python2.7/threading.py", line 505, in run self.__target(*self.__args, **self.__kwargs) File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks put(task) PicklingError: Can't pickle &lt;type 'function'&gt;: attribute lookup …

12
ฉันจะกู้คืนค่าส่งคืนของฟังก์ชันที่ส่งผ่านไปยังกระบวนการหลายตัวประมวลผลได้อย่างไร
workerในรหัสตัวอย่างด้านล่างฉันต้องการที่จะกู้คืนค่าตอบแทนของฟังก์ชั่น ฉันจะทำสิ่งนี้ได้อย่างไร ค่านี้ถูกเก็บไว้ที่ไหน? รหัสตัวอย่าง: import multiprocessing def worker(procnum): '''worker function''' print str(procnum) + ' represent!' return procnum if __name__ == '__main__': jobs = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) jobs.append(p) p.start() for proc in jobs: proc.join() print jobs เอาท์พุท: 0 represent! 1 represent! 2 represent! 3 represent! …

1
multiprocessing.Pool: map_async และ imap ต่างกันอย่างไร
ฉันพยายามที่จะเรียนรู้วิธีการใช้งูใหญ่multiprocessingแพคเกจ แต่ผมไม่เข้าใจความแตกต่างระหว่างและmap_async imapฉันสังเกตเห็นว่าทั้งสองmap_asyncและimapถูกดำเนินการแบบอะซิงโครนัส ดังนั้นเมื่อไรฉันจึงควรใช้อันอื่น และฉันจะดึงผลลัพธ์ที่ส่งคืนมาได้map_asyncอย่างไร? ฉันควรใช้สิ่งนี้หรือไม่? def test(): result = pool.map_async() pool.close() pool.join() return result.get() result=test() for i in result: print i

2
การแบ่งปันคิวผลลัพธ์ระหว่างกระบวนการต่างๆ
เอกสารสำหรับการแสดงโมดูลวิธีการส่งคิวให้กระบวนการที่เริ่มต้นด้วยmultiprocessing multiprocessing.Processแต่ฉันจะแชร์คิวกับกระบวนการของผู้ปฏิบัติงานแบบอะซิงโครนัสที่เริ่มต้นด้วยได้apply_asyncอย่างไร ฉันไม่ต้องการการเข้าร่วมแบบไดนามิกหรือสิ่งอื่นใดเป็นเพียงวิธีให้คนงาน (ซ้ำ ๆ ) รายงานผลกลับไปที่ฐาน import multiprocessing def worker(name, que): que.put("%d is done" % name) if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) q = multiprocessing.Queue() workers = pool.apply_async(worker, (33, q)) สิ่งนี้ล้มเหลวด้วย: RuntimeError: Queue objects should only be shared between processes through inheritance. ฉันเข้าใจว่าสิ่งนี้หมายถึงอะไรและฉันเข้าใจคำแนะนำในการสืบทอดแทนที่จะต้องการการดอง / การไม่หยิบ (และข้อ จำกัด พิเศษทั้งหมดของ …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.