V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xzc19970719
V2EX  ›  Python

Python 多线程 掷骰子 问题。(萌新)

  •  
  •   xzc19970719 · 2018-04-22 21:50:36 +08:00 · 3614 次点击
    这是一个创建于 2441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    import random
    from pygal import Bar
    from multiprocessing import Process, Manager,freeze_support


    class 骰子类():
    def __init__(self, 骰子面数=6):
    self.骰子面数 = 骰子面数

    def 掷骰子结果方法(self):
    return random.randint(1,self.骰子面数)


    骰子实例 = 骰子类()
    结果列表 = Manager().list()
    def 掷骰子函数(次数):
    for 投掷次数 in range(次数):
    结果列表.append(骰子实例.掷骰子结果方法())

    #掷骰子函数(100)
    if __name__ == '__main__':
    freeze_support()
    骰子进程批量 = Pool(10)
    for i in range(11):
    骰子进程批量.apply_async(掷骰子函数,args=(100,))
    骰子进程批量.close()
    骰子进程批量.join()
    print(结果列表)
    每面出现次数字典 = Counter(结果列表)
    print(每面出现次数字典)

    报错
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "D:\Python\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
    File "D:\Python\lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
    File "D:\Python\lib\multiprocessing\spawn.py", line 225, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
    File "D:\Python\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    run_name="__mp_main__")
    File "D:\Python\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
    File "D:\Python\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
    File "D:\Python\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
    File "E:\python 笔记\测试.py", line 15, in <module>
    结果列表 = Manager().list()
    File "D:\Python\lib\multiprocessing\context.py", line 56, in Manager
    m.start()
    File "D:\Python\lib\multiprocessing\managers.py", line 513, in start
    self._process.start()
    File "D:\Python\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
    File "D:\Python\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
    File "D:\Python\lib\multiprocessing\popen_spawn_win32.py", line 33, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
    File "D:\Python\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
    _check_not_importing_main()
    File "D:\Python\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
    RuntimeError:
    An attempt has been made to start a new process before the
    current process has finished its bootstrapping phase.

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

    if __name__ == '__main__':
    freeze_support()
    ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable.


    emmm 环境在 windows 下。
    10 条回复    2018-04-24 00:33:37 +08:00
    xzc19970719
        1
    xzc19970719  
    OP
       2018-04-22 21:51:07 +08:00
    英语差。。中文变量名见谅
    wwqgtxx
        2
    wwqgtxx  
       2018-04-23 00:52:07 +08:00 via iPhone
    你那是多进程不是多线程
    JamesMackerel
        3
    JamesMackerel  
       2018-04-23 08:43:02 +08:00 via iPhone
    为啥不去学易语言,那么牛逼,还能做黑产,做东西飞快。
    twotiger
        4
    twotiger  
       2018-04-23 10:58:57 +08:00
    linux 下没问题,你可以试试把你的全局变量
    骰子实例 = 骰子类()
    结果列表 = Manager().list()
    放到 最下面的 if __name__ == '__main__': 试试
    xzc19970719
        5
    xzc19970719  
    OP
       2018-04-23 11:16:57 +08:00 via Android
    @twotiger 嗯。。Windows 下要还要传递参数。。。呜呜
    xzc19970719
        6
    xzc19970719  
    OP
       2018-04-23 11:17:44 +08:00 via Android
    @JamesMackerel 😒就这么嫌弃中文变量名嘛
    xzc19970719
        7
    xzc19970719  
    OP
       2018-04-23 11:22:27 +08:00 via Android
    @JamesMackerel 刚学编程。。也不求什么效率 自己能一眼看懂就行😒
    chesterzzy
        8
    chesterzzy  
       2018-04-23 12:54:13 +08:00   ❤️ 1
    multiprocessing 在 windows 和 linux 上的表现不同。具体去看看文档吧
    另外第一次见 Python 里的中文变量名,长见识(没有贬低的意思,就是觉得挺好玩)
    xzc19970719
        9
    xzc19970719  
    OP
       2018-04-23 16:20:46 +08:00 via Android
    @chesterzzy 好的 谢谢大佬(≧ω≦)
    JamesMackerel
        10
    JamesMackerel  
       2018-04-24 00:33:37 +08:00 via iPhone
    @xzc19970719 没啊。我就是表达我的真实想法而已。易语言真的牛逼。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:21 · PVG 03:21 · LAX 11:21 · JFK 14:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.