Multiprocessing

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
Я одновременно запускаю 3 функции (после выполнения main), но в функции func2 цикл не работает, тк массив, по которому этот цикл проходит, пуст
Я так понимаю три функции не видят каких-либо изменений до выполнения самих этих функций, как это можно исправить?
Python:
from multiprocessing import Process
import time

x = []
i = [1, 2, 3, 4, 5]
def main():
    for item in i:
        x.append(item)
    print('main done')

def func1():
    print ('start func1')

def func2():
    print ('start func2')
    for t in x:
        print(t)

def func3():
    print ('start func3')


if __name__=='__main__':
    while True:
        main()

        p1 = Process(target=func1)
        p2 = Process(target=func2)
        p3 = Process(target=func3)

        p1.start()
        p2.start()
        p3.start() 

        p1.join()
        p2.join()
        p3.join()

        print('end')

        time.sleep(10)
        print('end_2')

Нужно, чтобы цикл видел уже готовый массив: x = [1, 2, 3, 4, 5]
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
про области видимости почитайте
вот так работает
Python:
from multiprocessing import Process
import time

x = []
i = [1, 2, 3, 4, 5]


def main(x):
    for item in i:
        x.append(item)
    print('main done')
    return x


def func1():
    print('start func1')


def func2(x):
    print('start func2')
    for t in x:
        print(t)


def func3():
    print('start func3')


if __name__ == '__main__':
    while True:
        main(x)

        p1 = Process(target=func1)
        p2 = Process(target=func2(x))
        p3 = Process(target=func3)

        p1.start()
        p2.start()
        p3.start()

        p1.join()
        p2.join()
        p3.join()

        print('end')

        time.sleep(10)
        print('end_2')
 
  • Мне нравится
Реакции: ratata

Форум IT Специалистов