2012-04-29 35 views
6

Tôi đang viết một chương trình mẫu để kiểm tra việc sử dụng multi hồ bơi của người lao động trong python 2.7.2+python Lỗi đa hồ bơi Assertion trong thông dịch

Đây là mã tôi đã viết trong thông dịch viên python ubuntu

>>> from multiprocessing import Pool 
>>> def name_append(first_name,last_name): 
...  return first_name+" "+last_name 
... 

>>> from functools import partial 
>>> partial_name_append=partial(name_append,'kiran') 
>>> partial_name_append('acb') 
'kiran acb' 
>>> abc='kiran' 

>>> pool=Pool(processes=4) 
>>> pool.map(partial_name_append,abc) 
['kiran k', 'kiran i', 'kiran r', 'kiran a', 'kiran n'] 
>>> pool.close() 
>>> pool.join() 

>>> pool.map(partial_name_append,abc) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 226, in map 
    assert self._state == RUN 
AssertionError 

Sau khi tôi nhận được lỗi pickle, trên hồ bơi của công nhân mã cho các tập dữ liệu lớn, tôi đang cố gắng làm các ví dụ nhỏ và cố gắng tìm ra lỗi là gì.

Tôi không hiểu tại sao cùng một tuyên bố 'pool.map' không hoạt động, khi nó đã hoạt động ở trên. Tôi nghĩ rằng tôi đã thực hiện 'bản đồ hồ bơi' một cách chính xác nhưng tôi không hiểu lý do.

là lỗi này liên quan tới "PicklingError: Không thể dưa: tra cứu thuộc tính BUILTIN .function Thất bại"

Ai đó có thể giúp tôi không?

Cảm ơn

+1

'multiprocessing.Pool()' không hoạt động trong trình thông dịch tương tác. Kiểm tra tài liệu [tại đây] (http://docs.python.org/library/multiprocessing.html) –

+0

'multiprocess.Pool()' tuy nhiên không hoạt động trong trình thông dịch tương tác. –

Trả lời

15

Bạn gõ:

>>> pool.close() 

from the docs:

close()

Prevents any more tasks from being submitted to the pool. Once all the tasks have been completed the worker processes will exit.

Tất nhiên bạn không thể sử dụng hồ bơi nữa, đóng tài khoản.

+0

vì vậy nếu tôi sử dụng 'pool = Pool (processes = 4)' một lần nữa sau đó tôi có thể sử dụng nó một lần nữa phải không? Chỉnh sửa: Nó làm việc khi tôi giao hồ bơi một lần nữa .. Cảm ơn bạn .. Nếu bạn không nhớ tôi có một câu hỏi "PicklingError: Không thể dưa: tra cứu thuộc tính builtin.function không thành công" Tôi không thể tìm ra lý do tại sao tôi tiếp tục nhận được lỗi này khi tôi sử dụng pool.map() trong một chương trình – kich

+1

không đóng hồ bơi ở tất cả (cho đến khi bạn không cần nó nữa). bạn không cần phải 'join()' pool (và do đó không cần đóng nó) để chờ kết quả từ 'Pool.map()', nó đã chặn cho đến khi kết quả đã sẵn sàng. bạn chỉ có thể tiếp tục sử dụng 'map()' tất cả những gì bạn thích. – SingleNegationElimination

Các vấn đề liên quan