Tôi mới dùng Python và thử một chương trình multiprocessing.pool để xử lý tệp, nó hoạt động tốt miễn là không có ngoại lệ. Nếu bất kỳ thread/quy trình được một ngoại lệ toàn bộ chương trình chờ đợi cho threadmultiprocessing Pool bị treo khi có ngoại lệ trong bất kỳ chủ đề nào
đoạn mã:
cp = ConfigParser.ConfigParser()
cp.read(gdbini)
for table in cp.sections():
jobs.append(table)
#print jobs
poolreturn = pool.map(worker, jobs)
pool.close()
pool.join()
Không nhắn:
Traceback (most recent call last):
File "/opt/cnet-python/default-2.6/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/opt/cnet-python/default-2.6/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/opt/cnet-python/default-2.6/lib/python2.6/multiprocessing/pool.py", line 259, in _handle_results
task = get()
TypeError: ('__init__() takes exactly 3 arguments (2 given)', <class 'ConfigParser.NoOptionError'>, ("No option 'inputfilename' in section: 'section-1'",))
tôi đã tiếp tục thêm trình xử lý ngoại lệ để chấm dứt quá trình
try:
ifile=cp.get(table,'inputfilename')
except ConfigParser.NoSectionError,ConfigParser.NoOptionError:
usage("One of Parameter not found for"+ table)
terminate()
nhưng vẫn đợi, không chắc chắn những gì còn thiếu.
Có vẻ như ConfigParser có cùng vấn đề với SQLAlchemy (ngoại lệ không thể chọn), xem [Hang trong kịch bản Python bằng cách sử dụng SQLAlchemy và đa xử lý] (http://stackoverflow.com/questions/8785899/hang-in-python-script -using-sqlalchemy-and-multiprocessing). Tôi đã báo cáo vấn đề này vì [Ngoại lệ ConfigParser không thể chọn được] (http://bugs.python.org/issue13760). –