【问题标题】:Python script gets stuck on dill.dump()Python 脚本卡在 dill.dump()
【发布时间】:2017-04-09 18:21:54
【问题描述】:

我正在使用 Python 3 和 Discord.py API 包装器(使用 asyncio)编写一个不和谐机器人。我正在运行一个网络服务器来处理主线程中的 Atom Feed 通知和第二个线程中的不和谐客户端。

我正在使用 dill 来保存自定义类的字典。当机器人收到包含有效命令的聊天消息(字典中的某些内容发生变化)时,该函数由 discord 客户端(线程 2)运行。

脚本似乎卡在dill.dump()

功能

def save_object(obj, filename):
    f = open(filename, "wb")
    print("Opened file.")
    dill.dump(obj, f)
    print("Dumped to file.")
    f.close()
    print("Closed file.")
    return
def load_object(filename):
    f = open(filename, "rb")
    obj = dill.load(f)
    f.close()
    return obj

调用函数

...
print('Saving Streamers')
save_object(Streamers, "streamers.dat")
print('Saving Youtubers')
save_object(Youtubers, "youtubers.dat")

我意识到我可以通过使用with 块使代码看起来更好(并且可能更高效),这只是一个测试版本(因此也是打印语句的负载)。我运行它时收到的输出是:

Saving Streamers
Opened file.
***NOTHING ON THIS LINE***

我没有收到任何错误消息,脚本只是停止在该行输出并冻结。

文件在文件资源管理器中可见,但包含 0 个字节。

当我使用CTRL+C 强制退出脚本时,文件最终会保存。

当我在 python3 解释器中手动运行此代码片段时,它工作正常(从同一个工作目录,读取和写入权限在那里,因为脚本是由 root 运行的)。

【问题讨论】:

  • 嗨!你能提供完整的代码设置吗?您可以尝试将您的 dill.dump 包装到 try/except 以捕获错误

标签: python multithreading python-3.x pickle dill


【解决方案1】:

问题似乎是全局解释器锁定。对我来说,解决方案是切换到多处理而不是线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多