python 多线程中子线程和主线程相互通信

Posted L某人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程中子线程和主线程相互通信相关的知识,希望对你有一定的参考价值。

主线程开启多个线程去干活,每个线程需要完成的时间不同,干完活以后都要通知给主线程,下面代码说明该应用:

代码块:

import threading
import queue
import time
import random

‘‘‘
需求:主线程开启了多个线程去干活,每个线程需要完成的时间
不同,但是在干完活以后都要通知给主线程
多线程和queue配合使用,实现子线程和主线程相互通信的例子
‘‘‘
q = queue.Queue()
threads=[]
class MyThread(threading.Thread):
    def __init__(self,q,t,j):
        super(MyThread,self).__init__()
        self.q=q
        self.t=t
        self.j=j

    def run(self):
        time.sleep(self.j)
        # 通过q.put()方法,将每个子线程要返回给主线程的消息,存到队列中
        self.q.put("我是第%d个线程,我睡眠了%d秒,当前时间是%s" % (self.t, self.j,time.ctime()))



‘‘‘
# 生成15个子线程,加入到线程组里,
    # 每个线程随机睡眠1-8秒(模拟每个线程干活时间的长短不同)
‘‘‘

for i in range(15):
   j=random.randint(1,8)
   threads.append(MyThread(q,i,j))

#    循环开启所有子线程
for mt in threads:
    mt.start()
print(进程开启时间:%s%(time.ctime()))
‘‘‘
通过一个while循环,当q队列中不为空时,通过q.get()方法,
循环读取队列q中的消息,每次计数器加一,当计数器到15时,
证明所有子线程的消息都已经拿到了,此时循环停止
‘‘‘
count = 0
while True:
    if not q.empty():
        print(q.get())
        count+=1
    if count==15:
        break

 

以上是关于python 多线程中子线程和主线程相互通信的主要内容,如果未能解决你的问题,请参考以下文章

pthread多线程是指同时运行多个程序吗?

Android中的常见通信机制和Linux中的通信机制

Java 多线程线程间的通信

python之多线程

Python第四周之多线程和多进程

java多线程基本概述——线程通信