python socket通信 多进程_python创建了两个模块进程,无法实现queue通信。

这个程序设计通信图,如通信模型图展示的。

问题是:online_tcp_聊天模块和manager_new_tcp模块无法通过online_chat_queue的模块,实现多进程通信。

两者都可以自己正常独立进行运行,但是,另一个程序put进去queue中的消息,另外一个程序,无法取出。一直在堵塞

图片描述

文件一 online_tcp_聊天模块

import socket

import threading

import logging

import online_chat_queue

logging.basicConfig(level=logging.INFO, format="%(threadName)-10s %(message)s")

class OnlineChatModuleOne(object):

def __init__(self):

# 主线程创建套接字,监听连接到来。

self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置地址复用

self.tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

self.tcp_socket.bind(("127.0.0.1", 7890))

self.tcp_socket.listen(128)

self.th_sta = False

def run(self):

while True:

logging.info("进入循环,等待新的连接到来")

new_client, new_addr = self.tcp_socket.accept()

# 创建两个线程处理新的连接

logging.info("已经有了新的连接")

th_recv = threading.Thread(name="th_recv+%s" % str(new_addr), target=self.recv_msg, args=(new_client,))

th_send = threading.Thread(name="th_send+%s" % str(new_addr), target=self.send_msg, args=(new_client,))

# 启动两个线程

self.th_sta = False

th_recv.start()

th_send.start()

logging.info("开始了子线程,处理新的连接")

def recv_msg(self, new_socket):

while True:

logging.info("已经来到了处理接受线程的地方")

recv_data = new_socket.recv(1024).decode("gbk")

# if not recv_data:

# online_chat_queue.msg_son_2_par.put("0000")

# new_socket.close()

# self.th_sta=True

# break

online_chat_queue.msg_son_2_par.put(recv_data)

print(online_chat_queue.msg_son_2_par.qsize())

logging.info("收到了消息,%s" % recv_data)

# logging.info("recv_data\t %s" % online_chat_queue.msg_son_2_par.get())

def send_msg(self, new_socket):

while True:

logging.info("已经来到了处理发送消息的地方>")

# send_data=input("%s请输入你要发送的消息:"%threading.currentThread).encode("utf-8")

send_data = online_chat_queue.msg_par_2_son.get()

logging.info("send_data%s" % send_data)

new_socket.send(send_data.encode("utf-8"))

logging.info("已经发送了消息。")

if self.th_sta:

break

def main():

# 创建对象,

onlinechat = OnlineChatModuleOne()

# 运行方法

onlinechat.run()

if name == '__main__':

main()

第二个模块 online_chat_queue

'''

这是每个进程进行通信采用的序列

'''

from multiprocessing import Queue

子进程发送收到的消息给父进程

msg_son_2_par = Queue()

主进程从网页获取的用户输入消息,发送给子进程

msg_par_2_son = Queue()

第三个模块 manager_new_tcp

作为tcp——socket 和 网页的中间管理zhe

import threading

import online_chat_queue

import logging

logging.basicConfig(level=logging.INFO,format=("%(threadName)-10s %(message)s"))

import time

import onLine_tcp_聊天

import multiprocessing

class ManagerOnlineQueue(object):

def run(self):

#创建两个线程

th_send=threading.Thread(target=self.send_queue)

th_recv=threading.Thread(target=self.recv_queue)

#启动两个线程

th_recv.start()

th_send.start()

logging.info("两个线程启动成功")

def send_queue(self):

while True:

logging.info("给queue中发送消息的线程")

send_data=input("请输入你要发送的消息")

online_chat_queue.msg_par_2_son.put(send_data)

logging.info("我已经把消息给了msg_par_2_son %s " % send_data )

def recv_queue(self):

while True:

logging.info("我来到了接受消息的地方")

logging.info("我是从儿子queue中获得新的消息")

recv_data=online_chat_queue.msg_son_2_par.get()

logging.info("我收到了你发送的消息.%s" % recv_data)

def main():

onlinech=onLine_tcp_聊天.OnlineChatModuleOne()

pro_onsocket=multiprocessing.Process(target=onlinech.run)

pro_onsocket.start()

manager=ManagerOnlineQueue()

manager.run()

if name == '__main__': main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值