Я выполняю параллелизм, используя Multiprocessing() и Threading(). Идея состоит в том, чтобы создать несколько потоков из нескольких процессов. Потокам необходим доступ к глобальной переменной, которая использует Value(), чтобы переменную можно было изменять и распределять по процессу (и, как я полагаю, по потокам). Итак, структура:
Код: Выделить всё
from multiprocessing import Queue, Process, Value
dc = {A: Queue(cpu_count), B: Value(ctypes.c_wchar_p, '', lock = False), C: Value('i', 0, lock = False)}
Process1 as supplement process that spawns worker threads:
Threads1 as task_producer for Queue
Threads2 giving flag signal for KeyboardInterrupt dc[c].value
Process3-8 as main process that spawns multiple threads:
Threads1-4 from Process3-8 access dc[b].value to connect
Но после доступа потоки зависали при загрузке значения dc
.value. Но при печати dc он работает и упоминает о существовании Value():
При дальнейшей проверке изменение dc[c].value с Process1.Threads1 дает результат, отличный от Process3-8.Threads1-4.
Код: Выделить всё
##print(workers, dc[c].value)
Process1.Threads1 1
Process3-8,Threads1-4 0
Я ожидаю, что Threading() внутри Multiprocessing() также сможет получить доступ к Value(), полученному из модуля Multiprocessing(). Итак, при вызове dc
.value он возвращает строку домена. Есть ли способ распределить строку редактируемой глобальной переменной между многопроцессорными процессорами и потоками?
Запуск последней версии python3.12
в Windows 11 22H2
Подробнее здесь: https://stackoverflow.com/questions/792 ... de-process