zoukankan      html  css  js  c++  java
  • 多线程和多进程通信原理

    多线程之间的通信和多进程之间通信原理是差不多的,所以在此直接上代码了,感兴趣的可以运行一下代码看看.

    多进程代码块:

    from socket import *
    from multiprocessing import *
    from time import sleep
    
    
    def dealWithClient(newSocket,destAddr):
        while True:
            recvData=newSocket.recv(1024).decode('gbk')
            if len(recvData)>0:
                print('来自%s的数据为:%s'%(str(destAddr),recvData))
                newSocket.send(b'thanks!')
            else:
                print('[%s]客户端已经关闭'%str(destAddr))
                break
        newSocket.close()
    
    
    
    def main():
        serSocket=socket(AF_INET,SOCK_STREAM)
        serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
        # 创建本地服务地址并绑定
        localAddr=('',7788)
        serSocket.bind(localAddr)
        serSocket.listen(2)
    
        try:
            while True:
                print('-----主进程,,等待新客户端的到来------')
                newSocket,destAddr=serSocket.accept()
                print('-----主进程,,接下来创建一个新的进程负责数据处理[%s]-----'%str(destAddr))
                client=Process(target=dealWithClient,args=(newSocket,destAddr))
                client.start()
                newSocket.close()
    
        finally:
            serSocket.close()
    
    if __name__=='__main__':
        main()

    多线程代码块:

    from socket import *
    from threading import Thread
    from time import sleep
    
    # 处理客户端的请求并执行事情
    def dealWithClient(newSocket,destAddr):
        while True:
            recvData = newSocket.recv(1024).decode('gbk')
            if len(recvData)>0:
                print('recv[%s]:%s'%(str(destAddr), recvData))
                newSocket.send(b'thread Ok!')
            else:
                print('[%s]客户端已经关闭'%str(destAddr))
                break
    
        newSocket.close()
    
    
    def main():
    
        serSocket = socket(AF_INET, SOCK_STREAM)
        serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR  , 1)
        localAddr = ('', 7788)
        serSocket.bind(localAddr)
        serSocket.listen(5)
    
        try:
            while True:
                print('-----主线程,,等待新客户端的到来------')
                newSocket,destAddr = serSocket.accept()
    
                print('-----主线程,,接下来创建一个新的线程负责数据处理[%s]-----'%str(destAddr))
                client = Thread(target=dealWithClient, args=(newSocket,destAddr))
                client.start()
    
                #因为线程中共享这个套接字,如果关闭了会导致这个套接字不可用,
                #但是此时在线程中这个套接字可能还在收数据,因此不能关闭
    #             newSocket.close()
        finally:
            serSocket.close()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    angularjs中的页面访问权限设置
    Html页面head标签元素的意义和应用场景
    脚本引用中的defer和async的用法和区别
    自适应页面中如何使用雪碧图
    网页颜色分辨测试小游戏的js化辨别及优化
    jQuery1.9及其以上版本中动态元素on绑定事件无效解决方案
    Data URL简介及Data URL的利弊
    浏览器调试:事件定位与源码查找
    简述ES5 ES6
    移动端中pagehide、pageshow的应用
  • 原文地址:https://www.cnblogs.com/Dark-fire-liehuo/p/9775608.html
Copyright © 2011-2022 走看看