使用sqlite3和matplotlib进行Python线程或多进程问题

时间:2014-11-24 19:32:40

标签: python multithreading matplotlib sqlite multiprocessing

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

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

  2. 写入数据库后,我使用matplotlib创建一些图和图像,然后将它们保存到具有唯一名称的文件中。我一直得到“QApplication不是在main()线程中创建的”和“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)  
    

1 个答案:

答案 0 :(得分:0)

队列可能正是您所寻找的,也许上一个答案中的链接可能对您有所帮助: Sharing data between threads in Python