久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

    <i id='pHvKB'><tr id='pHvKB'><dt id='pHvKB'><q id='pHvKB'><span id='pHvKB'><b id='pHvKB'><form id='pHvKB'><ins id='pHvKB'></ins><ul id='pHvKB'></ul><sub id='pHvKB'></sub></form><legend id='pHvKB'></legend><bdo id='pHvKB'><pre id='pHvKB'><center id='pHvKB'></center></pre></bdo></b><th id='pHvKB'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='pHvKB'><tfoot id='pHvKB'></tfoot><dl id='pHvKB'><fieldset id='pHvKB'></fieldset></dl></div>
  • <tfoot id='pHvKB'></tfoot>

      <small id='pHvKB'></small><noframes id='pHvKB'>

      <legend id='pHvKB'><style id='pHvKB'><dir id='pHvKB'><q id='pHvKB'></q></dir></style></legend>
        <bdo id='pHvKB'></bdo><ul id='pHvKB'></ul>

        使用多處理寫入文件

        Writing to a file with multiprocessing(使用多處理寫入文件)
        <i id='13cbO'><tr id='13cbO'><dt id='13cbO'><q id='13cbO'><span id='13cbO'><b id='13cbO'><form id='13cbO'><ins id='13cbO'></ins><ul id='13cbO'></ul><sub id='13cbO'></sub></form><legend id='13cbO'></legend><bdo id='13cbO'><pre id='13cbO'><center id='13cbO'></center></pre></bdo></b><th id='13cbO'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='13cbO'><tfoot id='13cbO'></tfoot><dl id='13cbO'><fieldset id='13cbO'></fieldset></dl></div>
          <bdo id='13cbO'></bdo><ul id='13cbO'></ul>

            • <small id='13cbO'></small><noframes id='13cbO'>

                <tfoot id='13cbO'></tfoot>

              1. <legend id='13cbO'><style id='13cbO'><dir id='13cbO'><q id='13cbO'></q></dir></style></legend>
                  <tbody id='13cbO'></tbody>

                  本文介紹了使用多處理寫入文件的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  我在 python 中遇到以下問題.

                  I'm having the following problem in python.

                  我需要并行進行一些計算,其結果需要按順序寫入文件中.所以我創建了一個接收 multiprocessing.Queue 和文件句柄的函數,進行計算并將結果打印到文件中:

                  I need to do some calculations in parallel whose results I need to be written sequentially in a file. So I created a function that receives a multiprocessing.Queue and a file handle, do the calculation and print the result in the file:

                  import multiprocessing
                  from multiprocessing import Process, Queue
                  from mySimulation import doCalculation   
                  
                  # doCalculation(pars) is a function I must run for many different sets of parameters and collect the results in a file
                  
                  def work(queue, fh):
                  while True:
                      try:
                          parameter = queue.get(block = False)
                          result = doCalculation(parameter) 
                          print >>fh, string
                      except:
                          break
                  
                  
                  if __name__ == "__main__":
                      nthreads = multiprocessing.cpu_count()
                      fh = open("foo", "w")
                      workQueue = Queue()
                      parList = # list of conditions for which I want to run doCalculation()
                      for x in parList:
                          workQueue.put(x)
                      processes = [Process(target = writefh, args = (workQueue, fh)) for i in range(nthreads)]
                      for p in processes:
                         p.start()
                      for p in processes:
                         p.join()
                      fh.close()
                  

                  但腳本運行后文件最終為空.我試圖將 worker() 函數更改為:

                  But the file ends up empty after the script runs. I tried to change the worker() function to:

                  def work(queue, filename):
                  while True:
                      try:
                          fh = open(filename, "a")
                          parameter = queue.get(block = False)
                          result = doCalculation(parameter) 
                          print >>fh, string
                          fh.close()
                      except:
                          break
                  

                  并將文件名作為參數傳遞.然后它按我的意圖工作.當我嘗試按順序執行相同的操作時,沒有多處理,它也可以正常工作.

                  and pass the filename as parameter. Then it works as I intended. When I try to do the same thing sequentially, without multiprocessing, it also works normally.

                  為什么它在第一個版本中不起作用?我看不出問題.

                  Why it didn't worked in the first version? I can't see the problem.

                  另外:我可以保證兩個進程不會同時嘗試寫入文件嗎?

                  Also: can I guarantee that two processes won't try to write the file simultaneously?

                  謝謝.我現在明白了.這是工作版本:

                  Thanks. I got it now. This is the working version:

                  import multiprocessing
                  from multiprocessing import Process, Queue
                  from time import sleep
                  from random import uniform
                  
                  def doCalculation(par):
                      t = uniform(0,2)
                      sleep(t)
                      return par * par  # just to simulate some calculation
                  
                  def feed(queue, parlist):
                      for par in parlist:
                              queue.put(par)
                  
                  def calc(queueIn, queueOut):
                      while True:
                          try:
                              par = queueIn.get(block = False)
                              print "dealing with ", par, "" 
                              res = doCalculation(par)
                              queueOut.put((par,res))
                          except:
                              break
                  
                  def write(queue, fname):
                      fhandle = open(fname, "w")
                      while True:
                          try:
                              par, res = queue.get(block = False)
                              print >>fhandle, par, res
                          except:
                              break
                      fhandle.close()
                  
                  if __name__ == "__main__":
                      nthreads = multiprocessing.cpu_count()
                      fname = "foo"
                      workerQueue = Queue()
                      writerQueue = Queue()
                      parlist = [1,2,3,4,5,6,7,8,9,10]
                      feedProc = Process(target = feed , args = (workerQueue, parlist))
                      calcProc = [Process(target = calc , args = (workerQueue, writerQueue)) for i in range(nthreads)]
                      writProc = Process(target = write, args = (writerQueue, fname))
                  
                  
                      feedProc.start()
                      for p in calcProc:
                          p.start()
                      writProc.start()
                  
                      feedProc.join ()
                      for p in calcProc:
                          p.join()
                      writProc.join ()
                  

                  推薦答案

                  你真的應該使用兩個隊列和三種不同的處理方式.

                  You really should use two queues and three separate kinds of processing.

                  1. 將東西放入隊列 #1.

                  1. Put stuff into Queue #1.

                  從 Queue #1 中取出東西并進行計算,然后將東西放入 Queue #2.您可以擁有其中的許多,因為它們從一個隊列中取出并安全地放入另一個隊列.

                  Get stuff out of Queue #1 and do calculations, putting stuff in Queue #2. You can have many of these, since they get from one queue and put into another queue safely.

                  從 Queue #2 中取出內容并將其寫入文件.您必須恰好擁有其中的 1 個,僅此而已.它擁有"文件,保證原子訪問,并絕對保證文件被干凈和一致地寫入.

                  Get stuff out of Queue #2 and write it to a file. You must have exactly 1 of these and no more. It "owns" the file, guarantees atomic access, and absolutely assures that the file is written cleanly and consistently.

                  這篇關于使用多處理寫入文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  What exactly is Python multiprocessing Module#39;s .join() Method Doing?(Python 多處理模塊的 .join() 方法到底在做什么?)
                  Passing multiple parameters to pool.map() function in Python(在 Python 中將多個參數傳遞給 pool.map() 函數)
                  multiprocessing.pool.MaybeEncodingError: #39;TypeError(quot;cannot serialize #39;_io.BufferedReader#39; objectquot;,)#39;(multiprocessing.pool.MaybeEncodingError: TypeError(cannot serialize _io.BufferedReader object,)) - IT屋-程序員軟件開
                  Python Multiprocess Pool. How to exit the script when one of the worker process determines no more work needs to be done?(Python 多進程池.當其中一個工作進程確定不再需要完成工作時,如何退出腳本?) - IT屋-程序員
                  How do you pass a Queue reference to a function managed by pool.map_async()?(如何將隊列引用傳遞給 pool.map_async() 管理的函數?)
                  yet another confusion with multiprocessing error, #39;module#39; object has no attribute #39;f#39;(與多處理錯誤的另一個混淆,“模塊對象沒有屬性“f)
                  • <bdo id='0LeEj'></bdo><ul id='0LeEj'></ul>

                      1. <legend id='0LeEj'><style id='0LeEj'><dir id='0LeEj'><q id='0LeEj'></q></dir></style></legend>
                          <tbody id='0LeEj'></tbody>

                        <tfoot id='0LeEj'></tfoot>
                        • <i id='0LeEj'><tr id='0LeEj'><dt id='0LeEj'><q id='0LeEj'><span id='0LeEj'><b id='0LeEj'><form id='0LeEj'><ins id='0LeEj'></ins><ul id='0LeEj'></ul><sub id='0LeEj'></sub></form><legend id='0LeEj'></legend><bdo id='0LeEj'><pre id='0LeEj'><center id='0LeEj'></center></pre></bdo></b><th id='0LeEj'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='0LeEj'><tfoot id='0LeEj'></tfoot><dl id='0LeEj'><fieldset id='0LeEj'></fieldset></dl></div>

                          <small id='0LeEj'></small><noframes id='0LeEj'>

                            主站蜘蛛池模板: 黄免费看 | 国产乱码久久久 | 欧美日韩在线高清 | 国产乱码精品1区2区3区 | 奇米影视在线 | 91久久精品国产91久久性色tv | 91精品久久久久久久久中文字幕 | 国产在线小视频 | 精品一区二区三区四区视频 | 国产视频1区2区 | 视频一区在线观看 | 91天堂网 | 看av网 | 一区视频| 成人特区 | 国产99久久精品一区二区永久免费 | 日韩有码一区 | 国产精品久久久久999 | 国产毛片久久久 | 成人免费视频网站在线看 | 91精品国产乱码久久久久久 | 在线观看中文字幕 | 天天影视色综合 | 男女那个视频 | 欧美激情综合网 | 91在线精品视频 | 国产综合精品 | 日本免费黄色 | 欧美午夜精品 | 91久久久久久久久 | 亚洲a毛片 | 国产精品国产三级国产aⅴ中文 | 免费一区二区三区 | 日本高清不卡视频 | 久久精品成人一区 | 日韩羞羞 | 亚洲最新在线 | 国产精品1区2区 | 五月婷六月丁香 | 日韩精品中文字幕在线 | 国产精品免费在线 |