和其他语言一样,当你需要计算机同时处理多项任务的时候,就需要threading了。
threading在message program中比较常见,发送信息和接收信息就是最典型的例子,两者同时进行。
下面一个简单的例子可以展示我们threading的工作。
首先我们需要import threading, 新建一个继承threading.Thread的类。类里的def run() 是约定的python在threading时候的方法。
接着一个for循环,for _ in range(30) 这里的 ‘_’ 只是告诉循环需要循环30次,省去了变量,但是效果是一样的。 接下来我们打印输出目前的thread的名字。
新建两个对象,分别给两个不同的名字,一个是发送消息一个是接收消息。在这两个对象上作用function用start()方法,这也是默认的,意思是当启用start()后,就会去类里面寻找一个叫run()的function。
import threading
class NaomiMessenger(threading.Thread):
def run(self):
for _ in range(30):
print(threading.current_thread().getName())
x = NaomiMessenger(name = 'sending messages')
y = NaomiMessenger(name = 'receiving messages')
x.start()
y.start()
运行得到如下结果【不知道为什么CSDN图片上传不了了,就将运行结果以诡异的形式把前面十几行贴下面了】:
"D:\Program Files\Python\Python3.6.0\python.exe" C:/Users/Naomi/PycharmProjects/untitled/tuna/test_threading.py
sending messages
sending messages
sending messages
sending messages
sending messages
sending messages
sending messages
sending messages
receiving messages
sending messages
receiving messages
sending messages
receiving messages
可以看到,我们先执行了x再执行了y,y的‘接收消息’并没有等到x的‘发送消息’全部结束后才开始执行。这边是threading用处。
threading可以帮我们更有效的处理,但也不是所有时候都要threading,比如在做计算的时候,我们还是by order来才对。
写这个小代码的时候碰到一些小问题,也不完全算问题,比如:
- 提示PEP 8 E302 expected 2 blank lines, found 1
这是提示在import module后要空两行,PEP 8 是写代码规范,以前还没有太注意过,惭愧。 - (threading.Thread) AttributeError ‘threading’ has no attribute ‘Thread’
在网上搜了但是似乎没有和我完全一样的问题,后来才反应过来是不是因为文件名写成了threading.py, 意识到之后修改了文件名,果然这个error就不见了。唉还真是。 - 代码里有一个for _ in range(30), 其实不一定要30,其他数字也OK,只是电脑在写10的时候并没有体现出来同时处理的效果,可能是机器年纪大了原因吧。
简单的threading就到这里,欢迎一起讨论。 :)