Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有UDP连接的gevent套接字_Python_Sockets_Subprocess_Gevent - Fatal编程技术网

Python 带有UDP连接的gevent套接字

Python 带有UDP连接的gevent套接字,python,sockets,subprocess,gevent,Python,Sockets,Subprocess,Gevent,我在这个问题上花了很多时间,但我不知道出了什么问题 我有两个python程序。P1程序使用gevent socket modeul创建两种类型的连接,即TCP和UDP。每个连接都在一个单独的greenlet中创建。程序1运行正常 然后我有另一个程序P2,它使用gevent子流程中的Popen调用P1作为外部程序,如下所示: sub = Popen("python p1.py 1", stdout = PIPE, stderr=STDOUT, shell=True) P1启动时,具有UDP连接的

我在这个问题上花了很多时间,但我不知道出了什么问题

我有两个python程序。P1程序使用gevent socket modeul创建两种类型的连接,即TCP和UDP。每个连接都在一个单独的greenlet中创建。程序1运行正常

然后我有另一个程序P2,它使用gevent子流程中的Popen调用P1作为外部程序,如下所示:

sub = Popen("python p1.py 1", stdout = PIPE, stderr=STDOUT, shell=True)
P1启动时,具有UDP连接的greenlet崩溃,出现以下错误:

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gevent/greenlet.py", line 327, in run
result = self.run(self.args, *self.kwargs)
File "gtest_runner.py", line 883, in run
self.sock.sendto(data, master_addr)
File "/usr/local/lib/python2.7/dist-packages/gevent/socket.py", line 475, in sendto
ret_val = sock.sendto(*args)
TypeError: an integer is required
<Greenlet at 0x7f86a0140730: <bound method Beacon.run of <__main_.Beacon instance at 0x7f86a2c4aa28>>> failed with TypeError
我在Ubuntu14上使用Python2.7


谢谢

如果您使用常规子流程模块运行它,它是否工作?否,首先我使用常规子流程模块,然后我更改为gevent子流程,以查看它是否解决了问题。回溯从何而来?这是P1内部的异常吗?如果是,则P1不正常运行。试着找出我的错误。当P2调用P1时,它会将master_addr中的端口号更改为字符串类型。这就是为什么sendto函数崩溃的原因。但奇怪的是,当您以字符串格式提供端口号时,它不会影响TCP套接字。