Tôi đang cố gắng sử dụng một hàm một phần để pool.map() có thể nhắm mục tiêu một hàm có nhiều tham số (trong trường hợp này là đối tượng Lock()).Python chia sẻ khóa giữa các quá trình
Dưới đây là ví dụ mã (lấy từ một câu trả lời cho một câu hỏi trước của tôi):
from functools import partial
def target(lock, iterable_item):
for item in items:
# Do cool stuff
if (... some condition here ...):
lock.acquire()
# Write to stdout or logfile, etc.
lock.release()
def main():
iterable = [1, 2, 3, 4, 5]
pool = multiprocessing.Pool()
l = multiprocessing.Lock()
func = partial(target, l)
pool.map(func, iterable)
pool.close()
pool.join()
Tuy nhiên khi tôi chạy mã này, tôi nhận được lỗi:
Runtime Error: Lock objects should only be shared between processes through inheritance.
Tôi gì mất tích ở đây? Làm thế nào tôi có thể chia sẻ khóa giữa các quy trình con của tôi?
Có một câu hỏi khác về cùng một vấn đề này, mặc dù lỗi cụ thể của chúng khác nhau - [Sự cố khi sử dụng khóa đa xử lý.Pool: lỗi tẩy] [http://stackoverflow.com/questions/17960296/trouble-using-a- lock-with-multiprocessing-pool-pickling-error) –