Python多处理进程似乎也应该共享对象

2024-04-25 10:04:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的多处理代码中,有几个工人用于并行处理。在

工作线程只能通过请求队列和带有锁的共享值进行通信。在

但现在看来,由于启动时的“分叉”,例如worker 4和5共享同一个字典文档。用内存(I)找出文件的地址。在

由于将文档存储在mongodb中,mongodb的驱动程序正在将_id写回文档中,因此会出现奇怪的错误。在

必须确保每个工作线程都完全隔离,期望队列和共享值,而我现在不知道如何隔离。

工人开始时:

for i in range(workers):
    Worker( request_queue,i,val, lock ).start()

class Worker(Process):
 def __init__(self, queue,ident,val,lock):
    super(Worker, self).__init__()

    self.queue= queue
    self.idstr= str(ident)
    self.val = val
    self.lock = lock
    dbconn = dbconnector.DBConnector()
    self.mongoconnection = dbconn.getMongoConnection()
    self.flagController = FlagController()
    print "Ident" + self.idstr

 def run(self):
    print 'Worker started'
    # do some initialization here

    print 'Worker Loop!'
    #time.sleep(5)
    try:
        for data in iter( self.queue.get, None ):
            mid = data["_id"]
            print "#" + self.idstr + " :  Mongoid " + str(mid)
            #time.sleep(5)
            try:

            timestamp = time.time()


            document = {"rawdata": data,
                                            "c": {
                                            "quelle": "t",
                                            "timestamp": mid.generation_time,
                                            "query" :  data["query"]                            
                                            }
                                            }

                    self.mongoconnection.insert("productive","input",document)

更新 我知道有人试图通过构造函数传入一个新文档,然后通过在Worker内部使用它self.document公司但遗憾的是,这没用。在


Tags: 文档selflockdatatime队列queueval