gpt4 book ai didi

python - nltk 的 Tornado 多进程崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:16 25 4
gpt4 key购买 nike

我在 Tornado 应用程序中遇到一些非常奇怪的行为。我正在运行很多进程,每个进程都有自己的 HTTP 服务器并在不同的端口上运行。

我向系统添加了一个新进程,它是另一个 TCPServer 类,它监听完全不同的端口,并且与其他进程没有任何交互。

我按如下方式启动新服务器:

def runSimService(port):
sim=SimService()
sim.listen(port)
currentIOLoop = tornado.ioloop.IOLoop.current()
currentIOLoop.start()

class SimService(TCPServer):
def __init__(self,host='localhost',motorport=27017):

TCPServer.__init__(self)
self.log=logging.getLogger("tornado.access")

# Needs to contain a User class log.
self.con=motor.MotorClient(host,motorport)
self.db=self.con.pDB
self.col=self.db.pCol

基本上这是我在调试时留下的唯一代码。我遇到的崩溃不是正常的 python 异常崩溃,这让我很担心。

enter image description here

我现在正在 Mac 上进行开发。有人可以解释一下这次崩溃是我的代码有问题还是这里发生了其他事情吗?'

更新:

好吧,这真的很奇怪,它似乎只在我导入以下内容时才会发生:

from nltk.stem.snowball import SnowballStemmer

或者

from nltk import word_tokenize, pos_tag

或者一般的 nltk...

库之间是否会发生一些奇怪的交互?我被困住了

创建进程的代码

if __name__ =='__main__':
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient",max_clients=2000)

processes=[]

processes.append(Process(target=runSimServer,args=(...,)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))
processes.append(Process(target=runServer,args=(...)))

# write pids to pid/ directory for use with the shutdown program
with open("pid/"+__file__.split(".")[0]+".pid","w") as f:
for p in processes:
p.start()
f.write(str(p.pid)+"\n")

谢谢

最佳答案

该崩溃消息的关键部分是“多线程进程 fork ”。如果要同时使用线程和进程,则必须在创建任何线程之前 fork 所有进程。看起来 nltk 在导入时正在创建一些线程。如果您还使用多个进程(看起来不像您引用的代码,但这显然是不完整的),则在所有进程启动之前不得导入nltk

关于python - nltk 的 Tornado 多进程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com