首页 / PYTHON / Python多处理和套接字未关闭
Python多处理和套接字未关闭
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python多处理和套接字未关闭,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2049字,纯文字阅读大概需要3分钟。
内容图文
![Python多处理和套接字未关闭](/upload/InfoBanner/zyjiaocheng/652/3823568ea6b74338ad9fa2d4c590ca24.jpg)
在Python上使用多处理和套接字时,我遇到奇怪的行为.我正在处理一段与我在下面发布的代码类似的代码(为了天真,我已经简化了很多事情).
该代码产生了三个进程:一个进程什么都不做,另一个进程启动第三个进程,它将在套接字上侦听.如果我终止“监听器”过程,则套接字仍保持打开状态(我可以通过netstat看到它).
>如果我删除(或停止)“ DoNothing”过程,则此方法有效.
>如果我将所有内容都切换为threading.Thread,则可以,但是
>如果我将DoNothing保留为进程并将服务器和启动器切换为threading.Thread,则问题仍然存在.
有没有人暗示为什么仍然打开套接字?处理多进程和套接字有什么问题吗?
我正在使用在Linux上运行的python 2.6.6.
非常感谢你,
阿尔瓦罗
import time
from multiprocessing import Process, Event
import socket
class Server(Process):
def __init__(self, port):
super(Server, self).__init__()
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind(("127.0.0.1",port))
self.s.listen(1)
self.s.settimeout(10)
self.is_stop = Event()
self.is_stop.clear()
def run(self):
while not self.is_stop.is_set():
print "Server: running (pid %s)" % self.pid
time.sleep(1)
print "Server: exiting"
def stop(self):
self.is_stop.set()
self.s.close()
class Launcher(Process):
def __init__(self):
super(Launcher, self).__init__()
self.srv = Server(9999)
self.srv.start()
def run(self):
print "Launcher pid %s" % self.pid
while True:
time.sleep(1)
def stop(self):
print "Launcher: I'm stopping the server"
self.srv.stop()
self.srv.terminate()
self.srv.join()
print "Launcher: server stopped"
class DoNothing(Process):
def __init__(self):
super(DoNothing, self).__init__()
def run(self):
while True:
time.sleep(1)
l = Launcher()
l.start()
dn = DoNothing()
dn.start()
time.sleep(2)
print " Stop launcher "
l.stop()
while True:
time.sleep(1)
编辑:
相关的netstat -lnp输出:
tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 7183/python
我注意到netstat中显示的pid从父进程(运行服务器的进程)更改为启动器的进程(服务器停止时).
解决方法:
要解决(套接字未关闭的)直接问题,请将self.s.shutdown(socket.SHUT_RDWR)添加到Server.stop方法中:
def stop(self):
self.is_stop.set()
self.s.shutdown(socket.SHUT_RDWR)
self.s.close()
内容总结
以上是互联网集市为您收集整理的Python多处理和套接字未关闭全部内容,希望文章能够帮你解决Python多处理和套接字未关闭所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。