问题描述
我正在阅读Python 3的线程文档,但是我在理解材料时遇到了麻烦.
I'm reading Python 3's Threading documentation but I'm having trouble understanding the material.
我有两个计时器可以并排运行,但是我不知道如何使这两个线程彼此交互.锁定,传递事件或其他任何东西.
I've gotten two timers to run side by side but I don't know how to make these two threads interact with each other. Lock, pass an event or anything.
有人可以在这里转储一个简单的完整示例,并简要说明其功能吗?
Could somebody just dump a simple full example here with brief description of what it does?
我正在尝试学习3.3,因此,如果可能的话,您将能够发布适用于该版本的代码.我还发现我找到的教程并没有让我知道他们正在测试的是哪个版本的Python.
I'm trying to learn 3.3 so if possible would you be able to post code that works for this version. I'm also finding that the tutorials I find aren't letting me know what version of Python they're exampling.
推荐答案
基于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
这篇关于简单线程事件示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!