簡體   English   中英

為什么我的並行代碼會產生錯誤?

[英]Why does my parallel code generate an error?

問題1:當sys.stdout.write沒有包裝在單獨的函數中時,下面的代碼失敗。

問題2:當ssys.stdout.write包裝在單獨的函數中時,代碼會在每個字母之間打印空格。

代碼(v1):

#!/usr/bin/env python

import pp
import sys

def main():
    server = pp.Server()

    for c in "Hello World!\n":
        server.submit(sys.stdout.write, (c,), (), ("sys",))()

if __name__=="__main__":
    main()

跟蹤:

$ ./parhello.py
Traceback (most recent call last):
  File "./parhello.py", line 15, in <module>
    main()
  File "./parhello.py", line 12, in main
    server.submit(write, (c,), (), ("sys",))()
  File "/Library/Python/2.7/site-packages/pp.py", line 461, in submit
    sfunc = self.__dumpsfunc((func, ) + depfuncs, modules)
  File "/Library/Python/2.7/site-packages/pp.py", line 639, in __dumpsfunc
    sources = [self.__get_source(func) for func in funcs]
  File "/Library/Python/2.7/site-packages/pp.py", line 706, in __get_source
    sourcelines = inspect.getsourcelines(func)[0]
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 688, in getsourcelines
    lines, lnum = findsource(object)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 527, in findsource
    file = getsourcefile(object)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 446, in getsourcefile
    filename = getfile(object)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 422, in getfile
    'function, traceback, frame, or code object'.format(object))
TypeError: <built-in method write of file object at 0x1002811e0> is not a module, class, method, function, traceback, frame, or code object
make: *** [test] Error 1

代碼(v2):

#!/usr/bin/env python

import pp
import sys

def hello(c):
    sys.stdout.write(c)

def main():
    server = pp.Server()

    for c in "Hello World!\n":
        server.submit(hello, (c,), (), ("sys",))()

if __name__=="__main__":
    main()

跟蹤:

$ ./parhello.py
H e l l o   W o r l d !

對於第一部分,pp並非旨在處理內置函數作為submit參數。 第二個問題更復雜。 在pp調用提交的函數之前,它會將stdout和stderr重定向到StringIO對象。 完成任務后,它將使用StringIO對象打印值

print sout,

這意味着它在打印之前會在sout的內容中附加一個空格。 要解決此問題,請不要讓您的函數直接使用sys.stdout ,而是打印到您管理的文件或隊列,並以更好的方式處理打印。

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM