Python多线程简单使用

Python多线程编程

大家查Python多线程资料时,应该会发现很多说Python的多线程是伪多线程。其实是那其他语言的多线程对比了如:C#。如果你的并发量密集这句话毫无疑问是对的,而且效果相差很明显,但如果你只是少量线程来说其实也没差。入坑的话推荐菜鸟教程:http://www.runoob.com/python/python-multithreading.html

写在前面

多线程早先接触过,不过也只是去做了个,walk,talk,walk,talk…这样的小案例,做过一个简单的多线程爬虫。今天拿到了一个proxy_pool,想在爬取的过程中动态的从proxy_pool中取对应的代理ip,这时我想到了多线程也顺便回顾下以前的知识。

创建简单的多线程

threading.Thread类创建线程对象(import threading)
  1. 函数无参:
    target参数的值对应的是函数名。
    def talk():
    	pass
    thread = threading.Thread(target=talk)
    thread.start()
    
  2. 函数有参(一个或多个)
    target参数后,添加需要传入函数中的参数
    def speak(a,b):
    	pass
    thread = threading.Thread(target=speak,('shuo','hua'))
    
多线程入门小案例
import threading,time

def walk():
    for i in range(5):
        print('walk')
        time.sleep(1)

def listen():
    for i in range(5):
        print('listen to music')
        time.sleep(1)
# 创建两个线程
thread_1 = threading.Thread(target=walk)
thread_2 = threading.Thread(target=listen)
# 执行的线程
thread_1.start()
thread_2.start()

运行结果:

walk
listen to music
walk
listen to music
walk
listen to music
walk
listen to music
listen to music
walk

setDaemon()设置守护线程

setDaemon默认为False,意味着当多线程运行时主线程结束,但有没结束的线程继续运行。当setDaemon参数设置为True时,主线程结束,所有线程不过有没有执行完,都一起结束执行。

setDaemon()在线程开始运行前设置为True,将walk的循环次数改为100。

import threading,time

def walk():
    for i in range(100):
        print('walk')
        time.sleep(1)

def listen():
    for i in range(5):
        print('listen to music')
        time.sleep(1)

thread_1 = threading.Thread(target=walk)
thread_2 = threading.Thread(target=listen)

thread_1.setDaemon(True)

thread_1.start()
thread_2.start()

设置为守护线程的本应执行100次,可随着主线程结束,守护线程也跟着结束。

walk
listen to music
walk
listen to music
walk
listen to music
walk
listen to music
walk
listen to music
walk
Process finished with exit code 0

join()等待线程执行完毕

如果只从字面意思理解,就是把当前线程加入到主线程中,更通俗点说就是主线程需要等待子线程执行完成之后再结束。
需要在线程启动后,才可使用join。

import threading,time

def walk():
    for i in range(100):
        print('walk')
        time.sleep(1)

def listen():
    for i in range(5):
        print('listen to music')
        time.sleep(1)

thread_1 = threading.Thread(target=walk)
thread_2 = threading.Thread(target=listen)

thread_1.start()
thread_2.start()
thread_1.join()

walk会执行100次以后,整个程序才会结束。

walk
listen to music
walk
listen to music
walk
listen to music
walk
listen to music
walk
listen to music
walk
walk
walk
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的多线程和队列可以一起使用来实现并发处理和线程间的通信。多线程允许我们同时执行多个任务,而队列则提供了一种线程安全的数据结构,用于在线程之间传递数据。 要使用多线程和队列,可以使用Python标准库中的`threading`和`queue`模块。下面是一个简单的示例代码来说明如何使用多线程和队列: ```python import threading import queue def worker(queue): while True: item = queue.get() if item is None: break # 处理任务 print("Processing:", item) queue.task_done() # 创建一个队列 task_queue = queue.Queue() # 创建多个线程 num_threads = 4 threads = [] for _ in range(num_threads): t = threading.Thread(target=worker, args=(task_queue,)) t.start() threads.append(t) # 向队列中添加任务 for item in range(10): task_queue.put(item) # 等待所有任务完成 task_queue.join() # 停止线程 for _ in range(num_threads): task_queue.put(None) for t in threads: t.join() ``` 在上面的示例中,我们创建了一个名为`worker`的函数作为线程的执行函数。该函数从队列中获取任务并执行,直到获取到一个特殊的结束标志`None`。每个线程都会执行这个函数。 我们创建了一个`task_queue`队列,用于存储任务。然后,我们创建了多个线程,并将它们添加到`threads`列表中。然后,我们使用`task_queue.put(item)`将任务添加到队列中。 最后,我们使用`task_queue.join()`来等待队列中的所有任务完成。然后,我们向队列中添加与线程数量相同的结束标志`None`,以通知每个线程停止执行。最后,我们使用`thread.join()`等待所有线程完成。 这就是一个简单使用多线程和队列的示例。使用多线程和队列可以实现更高效的并发处理和线程间的通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值