我创建了一个简单的pyro服务器,并尝试将其与pyinstaller打包在一起,但是每当我尝试通过调用“ ./main --s”然后在另一个终端选项卡“ ./main --c”中运行可执行文件时,代码就会给出我的输出正确,但是当我查看活动监视器时,就会不断创建可执行文件的新实例。用户中断Shell实例没有任何影响,并且在我完全重新启动系统之前,这些进程不断产生。
这是我作为可执行文件编译的主要脚本:
from face_id.face_id import server, client
from multiprocessing import freeze_support
import sys
if __name__ == "__main__":
freeze_support()
if sys.argv[1] == '--s':
server_start()
elif sys.argv[1] == '--c':
client_test()
这是pyro的类定义:
from __future__ import print_function
import Pyro4
import time
import sys
import cv2
sys.path.append('./')
import face_id.face as face
@Pyro4.expose
@Pyro4.behavior(instance_mode="single")
class FaceIDServer(object):
def __init__(self):
pass
def test_server(self):
return 'hello world'
class FaceIDClient:
def __init__(self):
sys.excepthook = Pyro4.util.excepthook
self.server = Pyro4.Proxy("PYRONAME:face_id.server")
def test(self):
print(self.server.test_server())
def server_start():
Pyro4.Daemon.serveSimple(
{
FaceIDServer: "face_id.server"
},
ns=True)
def client_test():
client = FaceIDClient()
client.test()
与通过python运行时相比,与脚本相比,这些启动的进程占用的cpu百分比要高得多。如果我看活动监视器或“ top -u”,我可以看到每隔几秒钟就会产生一个新进程。当我使用完整的应用程序代码而不是简单的示例时,这个问题变得更加糟糕。
此外,是的,我正在使用最新的pyinstaller,我尝试了冻结多处理,名称服务器运行正常,但是无论我怎么做,这个问题仍然存在。