深入理解Python多线程:方法解析与实践案例

案例1:

l1=[1,2,3,4,5,6]
for i in l1:
要求1:print(i)
要求2:每一个线程的频率不一样,time.sleep(i)
总结:创建多个线程,每个线程打印频率不一样;为了便于区分,每次打印的时候,可以加一个前缀,类似“线程1”、“线程2”、“线程3”…

1. 使用threading.Thread

我们可以创建threading.Thread类的实例来表示一个线程,然后调用它的start()方法来启动线程。这种方法的特点是简单直观,但缺点是每个线程都需要创建一个Thread对象,可能会占用较多的内存资源。

import threading
import time

def print_num(i):
    print(f"线程{
     
     i}{
     
     i}")
    time.sleep(i)

l1 = [1, 2, 3, 4, 5, 6]
threads = []

for i in l1:
    t = threading.Thread(target=print_num, args=(i,))
    t.start()
    threads.append(t)

for t in threads:
    t.join()

2. 使用concurrent.futures.ThreadPoolExecutor

concurrent.futures.ThreadPoolExecutor类提供了一个线程池,可以自动管理线程的创建和销毁。这种方法的优点是更加高效,因为它可以避免频繁地创建和销毁线程。此外,它还提供了submit()方法,可以方便地提交任务到线程池。

from concurrent.futures import ThreadPoolExecutor
import time

def print_num(i):
    print(f"线程{
     
     i}{
     
     i}")
    time.sleep(i)

l1 = [1, 2, 3, 4, 5, 6]
with ThreadPoolExecutor(max_workers=len(l1)) as executor:
    for i in l1:
        executor.submit(print_num, i)

3. 使用queue.Queue

queue.Queue类提供了一个线程安全的队列,我们可以将任务放入队列中,然后让多个线程从队列中取出任务并执行。这种方法的优点是可以实现任务的生产者-消费者模型,适用于需要处理大量任务的场景。

import queue
import threading
import time

def worker(q):
    while True:
        i = q.get()
        if i is None:
            break
        print(f"线程{
     
     i}{
     
     i}")
        time.sleep(i)
        q.task_done()

l1 = [1, 2, 3, 4, 5, 6]
q = queue.Queue()
threads = []

for i in l1:
    q.put(i)

for i in range(len(l1)):
    t = threading
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值