本文介绍了如何在Python程序中利用多线程技术使两个包含无限循环(while True)的任务并发执行,提高程序效率。
在Python编程中使用多线程可以实现任务的并发执行,在需要同时处理多个任务的情况下非常有用。下面将展示如何利用`threading`模块来让两个无限循环(即`while True:`)并行运行。
首先,我们需要导入必要的库:
```python
from time import sleep, ctime
import threading
```
接下来定义了两个函数:`muisc`和`move`。每个函数包含一个打印语句以及一个用于模拟执行延迟的`sleeep()`调用:
```python
def muisc(func):
while True:
print(Start playing: %s! %s %(func,ctime()))
sleep(2)
def move(func):
while True:
print(Start playing: %s! %s %(func,ctime()))
sleep(5)
```
函数`muisc()`每两秒执行一次,而`move()`则是每隔五秒钟运行。
为了根据文件类型决定调用哪个函数,我们定义了`player(name)`这个辅助函数:
```python
def player(name):
r = name.split(.)[1]
if r == mp3:
muisc(name)
elif r == mp4:
move(name)
else:
print(error: The format is not recognized!)
```
之后,创建一个文件列表`list`并启动多个线程。这里使用了`threading.Thread()`来为每个元素创建新的线程:
```python
list = [爱情买卖.mp3, 阿凡达.mp4]
threads = []
files = range(len(list))
for i in files:
t = threading.Thread(target=player, args=(list[i],))
threads.append(t)
# 启动所有新创建的线程:
for i in files:
threads[i].start()
```
最后,为了确保主线程等待这些子线程完成后再结束程序,可以使用`join()`方法:
```python
for i in files:
threads[i].join()
print(end:%s % ctime())
```
这个例子展示了如何利用多线程来同时运行两个无限循环,并且每个都在不同的线程中执行。这样可以在不阻塞主线程的情况下进行并发任务处理。
另外,`zip()`函数可以用来在for循环里同步遍历多个列表:
```python
list1 = [a, b, c, d]
list2 = [apple, boy, cat, dog]
for x, y in zip(list1, list2):
print(x, is, y)
```
这样每次迭代中,`x`取自第一个列表而`y`来自第二个列表。
通过多线程技术,可以实现更高效的程序设计,在处理IO密集型任务或需要并发执行不同操作时特别有用。同时使用如上的方法可以使代码更加简洁和优雅。