簡體   English   中英

AttributeError:無法獲取屬性“journalerReader” <module '__mp_main__< div><div id="text_translate"><p> 我嘗試在 python 中實現 Lmax。我嘗試在 4 個進程中處理數據</p><pre>import disruptor import multiprocessing import random if __name__ == '__main__': cb = disruptor.CircularBuffer(5) def receiveWriter(): while(True): n = random.randint(5,20) cb.receive(n) def ReplicatorReader(): while(True): cb.replicator() def journalerReader(): while(True): cb.journaler() def unmarshallerReader(): while(True): cb.unmarshaller() def consumeReader(): while(True): print(cb.consume()) p1 = multiprocessing.Process(name="p1",target=ReplicatorReader) p1.start() p0 = multiprocessing.Process(name="p0",target=receiveWriter) p0.start() p1 = multiprocessing.Process(name="p1",target=ReplicatorReader) p1.start() p2 = multiprocessing.Process(name="p2",target=journalerReader) p2.start() p3 = multiprocessing.Process(name="p3",target=unmarshallerReader) p3.start() p4 = multiprocessing.Process(name="p4",target=consumeReader) p4.start()</pre><p> 但是我的代碼中出現了這個錯誤:</p><pre> Traceback (most recent call last): File "<string>", line 1, in <module> File "<string>", line 1, in <module> File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) exitcode = _main(fd, parent_sentinel) File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 126, in _main File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 126, in _main self = reduction.pickle.load(from_parent) self = reduction.pickle.load(from_parent) AttributeError: Can't get attribute 'unmarshallerReader' on <module '__mp_main__' from 'd:\\python\\RunDisruptor.py'> AttributeError: Can't get attribute 'consumeReader' on <module '__mp_main__' from 'd:\\python\\RunDisruptor.py'></pre></div></module>

[英]AttributeError: Can't get attribute 'journalerReader' on <module '__mp_main__

我嘗試在 python 中實現 Lmax。我嘗試在 4 個進程中處理數據

import disruptor  
import multiprocessing
import random

if __name__ == '__main__':

    cb = disruptor.CircularBuffer(5)

    def receiveWriter():
        while(True):
            n = random.randint(5,20)
            cb.receive(n)

    def ReplicatorReader():
        while(True):
            cb.replicator()

    def journalerReader():
        while(True):
            cb.journaler()

    def unmarshallerReader():
        while(True):
            cb.unmarshaller()

    def consumeReader():
        while(True):
            print(cb.consume())
    


  
    p1 = multiprocessing.Process(name="p1",target=ReplicatorReader)
    p1.start()

    p0 = multiprocessing.Process(name="p0",target=receiveWriter)
    p0.start()
    
    p1 = multiprocessing.Process(name="p1",target=ReplicatorReader)
    p1.start()

    p2 = multiprocessing.Process(name="p2",target=journalerReader)
    p2.start()

    p3 = multiprocessing.Process(name="p3",target=unmarshallerReader)
    p3.start()

    p4 = multiprocessing.Process(name="p4",target=consumeReader)
    p4.start()
   

但是我的代碼中出現了這個錯誤:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "<string>", line 1, in <module>
  File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
  File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
    exitcode = _main(fd, parent_sentinel)
  File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 126, in _main
  File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 126, in _main
    self = reduction.pickle.load(from_parent)
    self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'unmarshallerReader' on <module '__mp_main__' from 'd:\\python\\RunDisruptor.py'>
AttributeError: Can't get attribute 'consumeReader' on <module '__mp_main__' from 'd:\\python\\RunDisruptor.py'>

您的第一個問題是Process調用的目標不能在if __name__ == '__main__':塊內。 但:

正如我在你之前的一篇文章中提到的,我看到你可以跨多個進程共享一個CircularBuffer實例的唯一方法是實現一個托管的 class,令人驚訝的是,這並不難做到。 但是,當您創建托管 class 並創建該 class 的實例時,您所擁有的實際上是對 object 的代理引用。這有兩個含義:

  1. 每個方法調用更像是對由您將啟動的管理器創建的特殊服務器進程的遠程過程調用,因此比本地方法調用具有更多的開銷。
  2. 如果打印引用,類的__str__方法將不會被調用; 您將打印代理指針的表示。 您可能應該將方法__str__重命名為類似dump的名稱,並在需要實例表示時顯式調用它。

您還應該明確地等待正在創建的進程完成,以便管理器服務不會過早關閉,這意味着每個進程都應該分配給一個唯一的變量並具有唯一的名稱。

import disruptor
import multiprocessing
from multiprocessing.managers import BaseManager
import random

class CircularBufferManager(BaseManager):
    pass

def receiveWriter(cb):
    while(True):
        n = random.randint(5,20)
        cb.receive(n)

def ReplicatorReader(cb):
    while(True):
        cb.replicator()

def journalerReader(cb):
    while(True):
        cb.journaler()

def unmarshallerReader(cb):
    while(True):
        cb.unmarshaller()

def consumeReader(cb):
    while(True):
        print(cb.consume())

if __name__ == '__main__':
    # Create managed class
    CircularBufferManager.register('CircularBuffer', disruptor.CircularBuffer)
    # create and start manager:
    with CircularBufferManager() as manager:
        cb = manager.CircularBuffer(5)

        p1 = multiprocessing.Process(name="p1", target=ReplicatorReader, args=(cb,))
        p1.start()

        p0 = multiprocessing.Process(name="p0",target=receiveWriter, args=(cb,))
        p0.start()

        p1a = multiprocessing.Process(name="p1a",target=ReplicatorReader, args=(cb,))
        p1a.start()

        p2 = multiprocessing.Process(name="p2",target=journalerReader, args=(cb,))
        p2.start()

        p3 = multiprocessing.Process(name="p3",target=unmarshallerReader, args=(cb,))
        p3.start()

        p4 = multiprocessing.Process(name="p4",target=consumeReader, args=(cb,))
        p4.start()

        p1.join()
        p0.join()
        p1a.join()
        p2.join()
        p3.join()
        p4.join()

AttributeError:無法獲取屬性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在嘗試編寫一個程序來抓取網站內容。 該腳本似乎運行了一段時間,但在幾次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 這是我要運行的腳本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module>

[英]AttributeError: Can't get attribute 'InsertNews' on <module '__main__'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 AttributeError:無法獲取屬性“tokenizer”<module '__main__'> AttributeError:無法獲取屬性“DataFrameSelector”<module '__main__'></module> AttributeError:無法獲取屬性“InsertNews” <module '__main__'< div><div id="text_translate"><p> 我正在嘗試編寫一個程序來抓取網站內容。 該腳本似乎運行了一段時間,但在幾次迭代后停止</p><pre>Traceback (most recent call last): File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 300, in _run_finalizers finalizer() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\util.py", line 224, in __call__ res = self._callback(*self._args, **self._kwargs) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 581, in _terminate_pool cls._help_stuff_finish(inqueue, task_handler, len(pool)) File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\pool.py", line 568, in _help_stuff_finish inqueue._reader.recv() File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\multiprocessing\connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) AttributeError: Can't get attribute 'InsertNews' on &lt;module '__main__' from 'c:\\program files (x86)\\microsoft visual studio\\2019\\common7\\ide\\extensions\\microsoft\\python\\core\\debugpy\\__main__.py'&gt;</pre><p> 這是我要運行的腳本</p><pre>from boilerpy3 import extractors import pymongo import multiprocessing as mp def InsertNews(newsite, symbol): print(symbol) print(newsite) extractor = extractors.ArticleExtractor() try: content = extractor.get_content_from_url(newsite) except Exception: pass print(content) record={symbol,content} mydb["StocksPressRelease"].insert_one(record) if __name__ == "__main__": print("started") pool = mp.Pool(mp.cpu_count()) myclient = pymongo.MongoClient("mongodb+srv://un:pwd@cluster0.subkd.azure.mongodb.net/db?retryWrites=true&amp;w=majority&amp;connectTimeoutMS=900000") mydb = myclient["db"] mycol = mydb["Stocks"] for x in mycol.find({},{"_id": 0, "symbol":1, "newsite": 1 }): results = pool.apply_async(InsertNews,args=(x["newsite"],x["symbol"])) pool.close()</pre></div></module> Python-ImportError:[模塊]的加載器無法處理__mp_main__ Python 多處理錯誤:AttributeError: Can't get attribute 'task' on<module '__main__' (built-in)> "</module> AttributeError:無法獲取屬性“video_dataset”<module '__main__' (built-in)></module> AttributeError:無法獲取屬性“GaitDataset”<module '__main__' (built-in)></module> /predict/ 處的 AttributeError 無法獲取屬性“人工神經元” 泡菜錯誤:AttributeError:無法獲取屬性<module '__main__' (built-in)></module> 多重處理錯誤“ AttributeError:無法獲取屬性&#39;testfuncxx&#39;
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM