#python #parallel-processing
Вопрос:
Обычно я бы использовал асинхронность с конкретными вызовами функций, а затем использовал ожидание. Но я не уверен, как реализовать это с помощью создания объектов. Я хочу запустить создание моих трех классов, а затем дождаться завершения всех функций инициализации. Так что мой вывод будет выглядеть так —
First Class
Second Class
Third Class
First Class done
Second Class done
Third Class done
(порядок занятий не имеет значения)
class First:
def __init__(self, x):
print("First Class")
sleep(60)
print("First Class done")
class Second:
def __init__(self, x):
print("Second Class")
sleep(60)
print("Second Class done")
class Third:
def __init__(self, x):
print("Third Class")
sleep(60)
print("Third Class done")
def main():
f = First(1)
s = Second(2)
t = Third(3)
#await f,s,t init functions to finish.
Комментарии:
1. Используйте многопоточность
Ответ №1:
Для этого вы можете использовать потоки. Но будьте внимательны к ГИЛУ. Если вы действительно хотите повысить производительность, вам следует использовать подпроцессы. Но в любом случае вот код для вашей проблемы:
import threading
from time import sleep
class First:
def __init__(self, x):
print("First Class")
#sleep(60)
print("First Class done")
self.x = x
class Second:
def __init__(self, x):
print("Second Class")
#sleep(60)
print("Second Class done")
self.x = x
class Third:
def __init__(self, x):
print("Third Class")
#sleep(60)
print("Third Class done")
self.x = x
def assign(lst,i,Class):
lst[i] = Class(i)
def main():
lst = [None,None,None]
t1=threading.Thread(target=assign,args=[lst,0,First])
t2=threading.Thread(target=assign,args=[lst,1,Second])
t3=threading.Thread(target=assign,args=[lst,2,Third])
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
print(lst[0].x,lst[1].x,lst[2].x)
if __name__ == "__main__":
main()
Комментарии:
1. Спасибо! Я рассмотрю подпроцессы, потому что каждый из этих классов очень интенсивен.