Tôi đang dò tìm để sử dụng multiprocessing
trong mã của mình để có hiệu suất tốt hơn.Tôi có thể sử dụng multiprocessing.Pool trong một phương thức của một lớp học không?
Tuy nhiên, tôi đã nhận ra lỗi như sau:
Traceback (most recent call last):
File "D:\EpubBuilder\TinyEpub.py", line 49, in <module>
e.epub2txt()
File "D:\EpubBuilder\TinyEpub.py", line 43, in epub2txt
tempread = self.get_text()
File "D:\EpubBuilder\TinyEpub.py", line 29, in get_text
txtlist = pool.map(self.char2text,charlist)
File "C:\Python34\lib\multiprocessing\pool.py", line 260, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Python34\lib\multiprocessing\pool.py", line 599, in get
raise self._value
File "C:\Python34\lib\multiprocessing\pool.py", line 383, in _handle_tasks
put(task)
File "C:\Python34\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(ForkingPickler.dumps(obj))
File "C:\Python34\lib\multiprocessing\reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
TypeError: cannot serialize '_io.BufferedReader' object
Tôi đã thử nó một cách khác và đã nhận lỗi này:
TypeError: cannot serialize '_io.TextIOWrapper' object
Mã của tôi trông như thế này:
from multiprocessing import Pool
class Book(object):
def __init__(self, arg):
self.namelist = arg
def format_char(self,char):
char = char + "a"
return char
def format_book(self):
self.tempread = ""
charlist = [f.read() for f in self.namelist] #list of char
with Pool() as pool:
txtlist = pool.map(self.format_char,charlist)
self.tempread = "".join(txtlist)
return self.tempread
if __name__ == '__main__':
import os
b = Book([open(f) for f in os.listdir()])
t = b.format_book()
print(t)
Tôi nghĩ rằng lỗi được nâng lên vì không sử dụng Pool
trong chức năng chính.
Giả sử của tôi có đúng không? Và làm cách nào tôi có thể sửa đổi mã của mình để sửa lỗi?
'Loại (charlist [0])' nói gì? Và có một chút khó hiểu vì thông báo lỗi của bạn không khớp với mã bạn đã đăng. ('char2text' và' format_char'). –
@JohnZwinck Mã thực sự của tôi khá dài và mã ở đây là một cái gì đó được đơn giản hóa. Nếu có vẻ khó hiểu, tôi sẽ chỉnh sửa nó.type (charlist [0]) là 'string' – PaleNeutron