多线程

添加线程 

本节我们来学习threading模块的一些基本操作,如获取线程数,添加线程等。首先别忘了导入模块:

import threading

获取已激活的线程数

threading.active_count()
# 2

查看所有线程信息

threading.enumerate()
# [<_MainThread(MainThread, started 140736011932608)>, <Thread(SockThread, started daemon 123145376751616)>]

输出的结果是一个<_MainThread(...)>带多个<Thread(...)>

查看现在正在运行的线程

threading.current_thread()
# <_MainThread(MainThread, started 140736011932608)>

添加线程,threading.Thread()接收参数target代表这个线程要完成的任务,需自行定义

# -*- coding:utf-8 -*-
import threading
print(threading.active_count())
print(threading.enumerate())
print(threading.current_thread)
def thread_add():
    print('This is a thread of %s' % threading.current_thread())
def main():
    thread = threading.Thread(target=thread_add)
    thread.start()
    print(threading.active_count())
if __name__ == '__main__':
    main()

Join效果

# -*- coding:utf-8 -*-
import threading
import time
def thread_job():
    print("T1 start\n")
    for i in range(10):
        time.sleep(0.5)
    print("T1 finish")
added_thread = threading.Thread(target=thread_job,name='T1')
added_thread.start()
added_thread.join()
print("all done")

要遵循顺序,可以在启动线程后对它调用join

不加join 的效果 运行结果是

T1 start

all done

T1 finish

添加join 的效果 运行结果为

T1 start

T1 finish

all done

储存进程结果 Queue

将数据列表中的数据传入,使用四个线程处理,将结果保存在Queue中,线程执行完后,从Queue中获取存储的结果

# -*- coding:utf-8 -*-
import threading
import time
from queue import Queue
def actionM(l,q):
    for i in range(len(l)):
        l[i]=l[i]**2
    q.put(l)
#创建线程
def createThreading():
    q = Queue()
    threads  = []
    data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
    for i in range(4):
        t = threading.Thread(target=actionM,args=(data[i],q))
        t.start()
        t.join()
        threads.append(t)
    results = []
    for _ in range(4):
        results.append(q.get())
    print(results)
if __name__ =='__main__':
    createThreading()

输出结果 [[1, 4, 9], [16, 25, 36], [49, 64, 81], [100, 121, 144]]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值