【问题标题】:Python threading or multiprocess questions with sqlite3 and matplotlib使用 sqlite3 和 matplotlib 的 Python 线程或多进程问题
【发布时间】:2014-11-24 19:32:39
【问题描述】:

我有一个 python 脚本,我想使用两个进程或线程来运行它。我仅限于两个,因为我连接到一个只有两个许可证的 api/link。我通过导入他们的模块并实例化他们的类来获取许可证。这是我的问题:

  1. 我需要写入一个 sqlitedb3。我试图共享一个数据库连接,将其传递给“worker”并让它创建自己的游标,但我会遇到“数据库锁定”消息,而且似乎无论我继续重试多长时间,锁都不会清除。我的程序将花费大约 5 分钟从模型加载数据,然后大约一分钟处理数据并插入数据库。然后在我转到下一个模型之前,它会执行 commit()。我想我可以忍受只创建两个独立的数据库

  2. 写入数据库后,我使用 matplotlib 创建一些绘图和图像,然后将它们保存到具有唯一名称的文件中。我不断收到“未在 main() 线程中创建 QApplication”和“Xlib:意外异步回复”。我认为从线程切换到多进程可能会有所帮助

  3. 我想确保一次只有两个线程或进程在运行。实现这一目标的最佳方法是什么。使用线程,我正在执行以下操作:

    c1 = load_lib_get_license()  
    c2 = load_lib_get_license()
    
    prc_list = list of models to process
    
    while (len(prc_list) > 0):  
        if not t1.is_alive():  
            t1 = threading.Process(target=worker,args=(c1,db_connection,prc_list.pop(0))  
            t1.start()  
        if not t2.is_alive():  
            t2 = threading.Process(target=worker,args=(c2,db_connection,prc_list.pop(0))  
            t2.start()  
        while (t1.is_alive() and t2.is_alive():  
            sleep(1)  
    

【问题讨论】:

  • 如何加载客户端?它是您导入的python模块吗?以后如何重新加载?
  • 经过一番调查,我的问题似乎有所不同,所以我编辑了上述内容

标签: python multithreading matplotlib sqlite multiprocessing


【解决方案1】:

队列可能是您正在寻找的东西,也许这个先前答案中的链接可能会对您有所帮助: Sharing data between threads in Python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多