Как во время выполнения цикла изменить target для threading
Есть следующий пример:
import threading
from queue import Queue
def myfunc():
while True:
num = queue.get()
print(num / 10)
queue.task_done()
def myfunc2():
while True:
num = queue.get()
print(num * 10)
queue.task_done()
queue = Queue()
for t in range(3):
t = threading.Thread(target=myfunc)
t.setDaemon(True)
t.start()
mylist = []
for x in range(10):
for i in range(10):
for i in range (10):
mylist.append(i)
for i in mylist:
queue.put(i)
queue.join()
Как, в данном случае, во время выполнения цикла, изменить target для тредов на myfunc2?
Ответы (2 шт):
Автор решения: n1tr0xs
→ Ссылка
Думаю, этот код вам поможет.
Его следует использовать вместо вашего цикла for t in range(3)
func=myfunc
for i in range(3):
if i==3:
func=myfunc2
t = threading.Thread(target=func)
t.setDaemon(True)
t.start()
Автор решения: Lecron
→ Ссылка
Как и в прошлом вопросе, предлагаю использовать пул потоков, а не создавать его самому.
import time
import threading
from concurrent.futures.thread import ThreadPoolExecutor
DELAY = 2
COUNT_THREAD = 3
def myfunc(value):
time.sleep(DELAY)
print(value, value / 10, threading.current_thread().name)
def myfunc2(value):
time.sleep(DELAY)
print(value, value * 10, threading.current_thread().name)
executor = ThreadPoolExecutor(COUNT_THREAD)
for x in range(10):
for f in (myfunc, myfunc2):
executor.submit(f, x)