Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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 子线程可以';是否更新父线程变量?_Python_Python Asyncio_Python Multithreading_Aiosmtpd - Fatal编程技术网

Python 子线程可以';是否更新父线程变量?

Python 子线程可以';是否更新父线程变量?,python,python-asyncio,python-multithreading,aiosmtpd,Python,Python Asyncio,Python Multithreading,Aiosmtpd,我在中发现了一个非常复杂的问题,在这里分享我的困惑,以帮助我找到解决问题的灵感 处境 两台运行Red Hat 7.9的服务器 ,对另一个不起作用 问题代码,简化: >>来自aiosmtpd.controller导入控制器 >>>从aiosmtpd.handlers导入接收器 >>>cont=控制器(接收器()) >>>续开始() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/local/lib/python3.6/site-packages/aiosmtpd/cont

我在中发现了一个非常复杂的问题,在这里分享我的困惑,以帮助我找到解决问题的灵感

处境
  • 两台运行Red Hat 7.9的服务器
  • ,对另一个不起作用
  • 问题代码,简化:
>>来自aiosmtpd.controller导入控制器
>>>从aiosmtpd.handlers导入接收器
>>>cont=控制器(接收器())
>>>续开始()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.6/site-packages/aiosmtpd/controller.py”,第180行,开始
引发运行时错误(“未知错误,初始化SMTP服务器失败”)
RuntimeError:未知错误,初始化SMTP服务器失败
只有在以下情况下才能生成上述运行时错误

预期流量
start()
->
\u run()
->
循环。创建服务器()

然后在第一次连接时:

loop.create\u server()
->
\u factory\u invoker()
->
factory()

属性
smtpd
\u factory\u invoker
中设置:

试试看:
self.smtpd=self.factory()
如果self.smtpd为无:
raise RUNTIMERROR(“工厂()返回无”)
返回self.smtpd
除异常作为错误外:
self.\u线程\u异常=错误
return\u FakeServer(self.loop)
self.\u线程\u异常
解释如下:

如果self.\u thread\u异常不是None:
提升自我。\u线程\u异常
#防御性
如果self.smtpd为无:
引发运行时错误(“未知错误,初始化SMTP服务器失败”)
如您所见,如果
self.smtpd
None
,则只有在
\u factory\u invoker()中出现错误时才会发生。如果是这样,错误应该被捕获并记录在
self.\u thread\u exception
中。如果
self.\u thread\u exception
None
,则
\u factory\u invoker()
已成功,因此
self.smtpd
无法
None

我解决这个问题的主要问题是,在我所有的测试系统(Windows、Ubuntu、OpenSUSE、MacOS和FreeBSD)上,我从未遇到过类似的错误


所以我被难住了。如果有任何解决这个问题的想法,我将不胜感激。

好吧,显然我是被派去做白费力气了

复合因子是因为我已抑制了以下方面的所有异常

试试看:
self._testconn()
除例外情况外:
#我们完全不关心testconn遇到的异常,
#如果factory()遇到问题,将会发生这种情况。
通过
因此,在
self.\u testconn()
中引发的一个非常有用的异常被吞没

显然,
self.\u testconn()
尝试连接到
主机:端口时失败,因此,
\u factory\u invoker()
从未被调用

一旦
try..except
块被修改为仅吞咽
socket.socket\u timeout
,实际问题就出现了,我们可以快速解决它

这些都记录在中,因此我不会在这里重复它们:-)

感谢所有花时间和精力尝试解决这个难题的人