Я пытаюсь использовать частичную функцию, чтобы pool.map() мог нацеливать на функцию с более чем одним параметром (в данном случае объект Lock()).Python разделяет блокировку между процессами
Вот пример кода (взятый из ответа на предыдущий мой вопрос):
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()
Однако, когда я запускаю этот код, я получаю ошибку:
Runtime Error: Lock objects should only be shared between processes through inheritance.
Что я отсутствует здесь? Как я могу совместно использовать блокировку между моими подпроцессами?
Существует еще один вопрос по этой же проблеме, хотя их конкретная ошибка отличается от других. [Неисправность использования блокировки с многопроцессорной обработкой.Pool: ошибка травления] (http://stackoverflow.com/questions/17960296/trouble-using-a- lock-with-multiprocessing-pool-pickling-error) –