Подтвердить что ты не робот

Пример простого потока событий

Я читаю документацию по Python 3 Threading, но у меня возникают проблемы с пониманием материала.

У меня есть два таймера для работы рядом, но я не знаю, как заставить эти два потока взаимодействовать друг с другом. Блокировка, передать событие или что-нибудь.

Может ли кто-нибудь просто выложить простой полный пример с кратким описанием того, что он делает?

Я пытаюсь изучить 3.3, чтобы по возможности вы могли опубликовать код, который работает для этой версии. Я также обнаружил, что учебники, которые я нахожу, не дают мне знать, какую версию Python они рассматривают.

4b9b3361

Ответ 1

Пример на основе queue документации:

#!python3
import threading
from queue import Queue
import time

# lock to serialize console output
lock = threading.Lock()

def do_work(item):
    time.sleep(.1) # pretend to do some lengthy work.
    # Make sure the whole print completes or threads can mix up output in one line.
    with lock:
        print(threading.current_thread().name,item)

# The worker thread pulls an item from the queue and processes it
def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

# Create the queue and thread pool.
q = Queue()
for i in range(4):
     t = threading.Thread(target=worker)
     t.daemon = True  # thread dies when main thread (only non-daemon thread) exits.
     t.start()

# stuff work items on the queue (in this case, just a number).
start = time.perf_counter()
for item in range(20):
    q.put(item)

q.join()       # block until all tasks are done

# "Work" took .1 seconds per task.
# 20 tasks serially would be 2 seconds.
# With 4 threads should be about .5 seconds (contrived because non-CPU intensive "work")
print('time:',time.perf_counter() - start)

Вывод:

Thread-3 2
Thread-1 0
Thread-2 1
Thread-4 3
Thread-3 4
Thread-1 5
Thread-2 6
Thread-4 7
Thread-3 8
Thread-1 9
Thread-2 10
Thread-4 11
Thread-3 12
Thread-1 13
Thread-2 14
Thread-4 15
Thread-1 17
Thread-3 16
Thread-2 18
Thread-4 19
time: 0.5017914706686906