请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

multiprocess 报错 TypeError: 'method' object is not iterable

在scheduler中加了multiproces之后,download 和 md5_list都变成了 multiprocess的 method,无法正常往下执行。

  # multiprocess
    from pdb import set_trace
    set_trace()
    scheduler.set_cal_type(CalcType.MultiProcess)
    multiprocess_time = scheduler.process()
Traceback (most recent call last):
  File "/usr/local/study_process/download_server/scheduler.py", line 119, in <module>
    multiprocess_time = scheduler.process()
  File "/usr/local/study_process/download_server/scheduler.py", line 51, in process
    for md5 in md5_list:
TypeError: 'method' object is not iterable

(Pdb) url_list
['https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png']
(Pdb) content_list
<bound method BaseModule._process_multprocess of <modules.downloader.Downloader object at 0xffffb8dea5b0>>
(Pdb) md5_list
<bound method BaseModule._process_multprocess of <modules.hasher.Hasher object at 0xffffb8dea280>>

正在回答 回答被采纳积分+3

1回答

咚咚呛 2021-12-12 18:00:35

这应该和加不加入multiprocess没关系,确认下代码实现逻辑的改动是否合理,或者可以参考下老师提供的代码。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕丝2042335 #1
    单线程和多线程没问题,加了多进程之后报错的。只要运行到多进程这一块就会报错。
    搞定了, base.py这里少传参数导致的。
    
    ```
        def process(self, list_):
            if self.calc_type == CalcType.SingleThread:
                return self._process_singlethread(list_)
            elif self.calc_type == CalcType.MultiThread:
                return self._process_multithread(list_)
            elif self.calc_type == CalcType.MultiProcess:
                return self._process_multiprocess(list_)
            pass
    ```
    回复 有任何疑惑可以回复我~ 2021-12-12 22:55:28
  • 提问者 慕丝2042335 #2
    单线程和多线程,content_list 和 md5_list 是个list类型的,但是多进程这里是个 'method' object
    回复 有任何疑惑可以回复我~ 2021-12-12 22:57:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信