龙卷风多进程崩溃与nltk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了龙卷风多进程崩溃与nltk相关的知识,希望对你有一定的参考价值。

我在龙卷风应用程序中遇到了一些非常奇怪的行为。我正在运行很多进程,每个进程都有自己的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)+"
")

谢谢

答案

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

以上是关于龙卷风多进程崩溃与nltk的主要内容,如果未能解决你的问题,请参考以下文章

带有 AssertionError 的龙卷风 websocket 崩溃

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

代码片段:Shell脚本实现重复执行和多进程

多线程编程

将片段与 GoogleMap 一起使用时应用程序崩溃

片段崩溃与 setOnClickListener