Python игнорирует Pool.join() и продолжает выполнять следующий код?Python

Программы на Python
Ответить
Anonymous
 Python игнорирует Pool.join() и продолжает выполнять следующий код?

Сообщение Anonymous »

import multiprocessing
import time

def task_function(x):
print(f"Processing {x} in process {multiprocessing.current_process().name}")
time.sleep(1)

def main():
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

with multiprocessing.Pool(processes=4) as pool:
pool.map_async(task_function, data)

print("Waiting for tasks to complete...")
pool.close()
pool.join()
print("All tasks completed.")

if __name__ == "__main__":
main()

Я не знаю, почему в приведенном выше коде метод join() правильно блокирует код, чтобы он продолжал работать. Но в одном из моих сложных случаев использования метод join() недействителен.
Ниже приведена часть моего сложного кода.
with multiprocessing.Pool(processes=4) as read_pool:
# read_pool = multiprocessing.Pool(4)
read_jobs = read_pool.map_async(
func=read_image_task,
iterable=[(filename, image_directory, queue) for filename in images_to_ocr]
)
read_pool.close()
read_pool.join()
print(123) # before running the read_image_task function, it print 123

и как ни странно, когда я добавляю этот read_jobs.get(), он успешно блокируется и не печатает 123.
read_pool.join()
read_jobs.get()
print(123)


Подробнее здесь: https://stackoverflow.com/questions/793 ... owing-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»