问题标签 [python-multithreading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python队列没有传递正确的数据
刚刚找到了帮助我调整 pyftpdlib 模块的 Queue 模块。我正在运行一个非常严格的 FTP 服务器,我的目标是限制可上传的文件名。这是为了防止人们上传他们想要的任何东西(它实际上是上传客户端的后端,而不是完整的 FTP 服务器)。
我在 ftpserver 授权器中有这个:
我的问题是,在服务器启动后,我第一次存储文件时,它会执行初始数据库调用并正确获取所有世界。但是当我再添加另一个世界时(例如,设置is_synced=True
一个,它仍然从 .has_perm() 返回旧数据,self.q.get()
每次上传文件时都会调用它,它需要返回实时数据(检查是否允许文件)。
例如,全新的服务器:
- STOR 文件.zip,
self.q.get()
返回<World1, World2>
- 通过其他方法等更新数据库
- STOR file2.zip, inside
fetch_worlds
,print worlds
返回<World1, World2, World3>
但self.q.get()
返回<World1, World2>
刚刚找到 Queue 模块,它似乎会有所帮助,但我无法正确实现。
(也无法添加标签pyftpdlib
)
python - Python中的“无法启动新线程错误”
我正在运行一个脚本,它从 debian 包中提取信息并将其保存在数据库中。
从大约 100 个包中提取信息后,会发生错误。错误是“无法启动新线程”为什么我会遇到这个错误?可能的解决方案是什么?
这是用于保存数据的代码:
就像Description
,包的大约还有 2 个属性以类似的方式保存。
这是发生错误时我得到的完整回溯:-
我没有编写任何代码来处理线程。
python - 从 Python 中的守护线程触发主线程中的异常
如何从 Python 中的守护线程触发主线程中的异常,运行阻塞代码?
我有一个守护线程,它定期检查数据库中是否有记录表明其当前进程应该终止(即用户按下了“取消”按钮)。在我的主要非守护程序线程中,我正在对无法轻松修改以正常终止的外部进程运行阻塞调用。但是,当我手动触发一个键盘中断时,主线程可以优雅地处理一个正常的键盘中断。
因此,如果我的守护线程收到终止命令,我如何在主线程中引发异常来终止我的进程?
google-app-engine - Google App Engine python 2.7中的“释放未锁定的锁”错误,线程安全=否
我在 Google App Engine (gqueues) 上的应用程序的日志中偶尔会出现“释放解锁锁”错误,并且无法弄清楚原因(下面的完整堆栈跟踪)。有谁知道为什么会发生这个错误?
有趣的是,该应用程序在 python 2.7 上,threadsafe=NO,所以会发生任何锁定或锁定错误似乎很奇怪。
背景故事:GQueues 在 python2.5 上,4 月初我将它迁移到 2.7 并设置 threadsafe=True。一切正常一周。然后在 4 月 9 日早上,整个应用程序无法访问,出现 500 个错误。它不断产生延迟超过 30 秒的新服务器实例。我注意到在我的日志中我看到了错误“无法解锁未锁定的锁”。在迁移过程中我没有向我的代码添加任何锁定机制,所以我认为这是错误所指的应用程序引擎的锁定。无论如何,我将我的应用程序回滚到仍然在 Python 2.5 上的上一个版本,一切又开始工作了。
4 月晚些时候,AppEngine Downtime Notify 透露,他们在 4 月 9 日结束时出现了一个问题,导致 python 2.7 应用程序出现问题。 https://groups.google.com/d/topic/google-appengine-downtime-notify/QL8TmRn6Ay4/discussion
我跟进了来自 Google 的 Christina Ilvento,她认为现在回到 Python 2.7 并设置 threadsafe=True 应该没问题。我迁移回 2.7,但留下了 threadsafe=False,我想我会花几个星期来确保在 2.7 上一切正常,然后再次打开线程(我认为这是导致问题的原因)。几周前一切正常,但现在我看到这个“释放解锁锁”错误,即使禁用了线程。有谁知道这里发生了什么?
Christina 建议我在这里发帖,App Engine 团队会跟进。
更新:这是其中一个错误的完整回溯
python - 获取 Python 中线程的所有统计信息
在我的应用程序中,我使用线程模块创建了许多线程,我需要尽可能多地获取有关它们的信息。没有任何问题,我可以获取有关运行时间的信息。但是如何获取线程的内存使用情况和 CPU 使用情况(最好是 CPU 时间)等信息。
我找到了 yappi 模块,但它不适合我。
python-2.7 - 将数据返回到调用子流程的原始流程
有人告诉我将此作为一个新问题发布。这是从 spawn 线程实例化新的 WX Python GUI的后续行动
我将以下代码实现到从衍生线程(Thread2)调用的脚本中
在运行 GUI2 的新进程上,我希望“完成”按钮事件处理程序将 4 个数据集返回给 Thread2,然后自行销毁(GUI2)
目前,此实现在新进程中生成了另一个主 GUI。我想要做的是将数据返回到原始过程。谢谢。
python - PyThread_acquire_lock - 获取密钥的问题
我正在编写多线程 python 应用程序。
主线程创建一个由 5 个工作线程组成的线程池。主线程还创建了一个 Monitor Thread。
总计:6 个线程 + 1 个主线程 = 7
所有线程都与 MySQL 服务器对话 (mysqldb -> libmysqlclient_r)
在我的 SQL 包装器中,我向 DB 查询函数添加了一个 Threading.Lock。这个锁是一个全局锁,所有查询数据库的线程都使用它。
一切正常,直到某个时候,主线程卡住了(所有线程也卡住了)我附加了 GDB 调试器并注意到:(信息线程)
Th1 = 主线程,Th2 = 监控线程,Th3-Th7 - 工作线程
我注意到监视器线程旁边的所有线程都在等待 sem_wait():
但是,监视器线程能够获取和释放锁(它每 30 秒运行一次,您看到的 select() 是由于 sleep(30))。我不明白,为什么其余线程都卡在 sem_wait() 上,因为没有人获得锁。
任何想法如何解决这个问题?如何调试这个?
谢谢
python - 使用多线程优化 python 脚本
大家好!我已经编写了小型网页爬虫功能。但是我是多线程的新手,我无法优化它。我的代码是:
可以看到,这里它在特定时间从候选人那里获取一个 url。我想让这个脚本成为多线程的,以这样一种方式,它可以从候选人那里获取至少 N 个 url,并完成这项工作。谁能指导我?提供任何链接或建议?
python - 将 Twisted 中的代码推迟到特定线程
我正在用 Twisted 和 pyCUDA 编写服务器。CUDA 工作方式的一个限制是我必须在初始化它的同一线程中访问 CUDA 上下文。但是,Twisted 的线程池实现不允许我请求特定线程。
例如,如果我有多个客户端连接到服务器,它们将请求使用 CUDA 完成一些计算。将使用同一个 CUDA 对象请求多个操作(初始化很昂贵)。我想使用 deferToThread 函数,但这不允许我推迟到特定线程,只是“一些”线程。理想情况下,我想做的是使用 deferToThread 之类的机制,但要指定代码运行所在的线程。任何建议将不胜感激,也许 Twisted 是该项目的错误方式。
python - 在 Python 中为不同的结果线程化相同的函数
我需要我的程序并行执行某个功能。但是根据用户与程序的交互方式,该功能会产生不同的结果。我在一个名为 threadGUI.py 的模块中有一个简单的 GUI,它有两个选项:下载和上传。这些选项创建包含与函数相关的变量的字典。这些字典存储在主字典中,主字典存储在 thread_test.py 模块中。这些在一个接一个地执行时工作正常,但是当我尝试并行执行时出现问题。threadGUI.py中的线程相关代码:
上述函数调用 thread_test.py 模块中的 begin_test 函数。该函数如下所示:
这是我的代码的简化示例。我的问题是我的代码只执行两个函数中的一个,而不是两个函数。因此,如果我创建了一个名为下载、上传、下载的字典,那么它将执行三个下载,而不是所需的模式。