问题标签 [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 - 子进程在 thread.start() 之后运行时失效
我遇到了一个问题,即应该几乎立即返回的子进程调用最终阻塞(实际的子进程已失效且未清理)。这似乎只发生在我也使用线程时。下面的程序很好地再现了我所看到的。通过运行它,您会看到主机名被打印了很多次,数字在整个范围内循环,直到它被阻塞。我怀疑一旦线程完成,不存在的进程将被清理,然后它会再次发生。
任何人都了解正在发生的事情以及如何在不发生这种情况的情况下同时使用线程和子进程?我在 Ubuntu 11.4 上使用 Python 2.7.1+。
运行它会导致子进程失效并阻塞主线程:
python - 线程和信息传递——如何
为了摆脱混乱,我编辑了这个问题:
一个.py
但我在这里的困惑是我能够从线程之间的队列中放置和获取值,但在计数的情况下它不会反映。
这是为什么?
这里实际上缺少什么?
python - 使用 ^C/KeyboardInterrupt 在子线程中中断 Python raw_input()
在多线程 Python 程序中,一个线程有时会使用内置的raw_input()请求控制台输入。我希望能够在 raw_input 提示符下通过在 shell 中键入 ^C 来关闭程序(即,使用 SIGINT 信号)。但是,当子线程正在执行 raw_input 时,键入 ^C 什么都不做——直到我按下回车键(离开 raw_input)才引发 KeyboardInterrupt。
例如,在以下程序中:
在输入完成之前,键入 ^C 不会执行任何操作。但是,如果我们只是调用T().run()
(即单线程情况:只在主线程中运行 raw_input),^C 会立即关闭程序。
据推测,这是因为 SIGINT 被发送到主线程,主线程被挂起(等待 GIL),而分叉线程在控制台读取时阻塞。在 raw_input 返回后,主线程在获取 GIL 之前不会执行其信号处理程序。(如果我对此有误,请纠正我——我不是 Python 线程实现方面的专家。)
有没有办法以类似 raw_input 的方式从标准输入读取,同时允许 SIGINT 由主线程处理,从而降低整个过程?
[我在 Mac OS X 和一些不同的 Linux 上观察到上述行为。]
编辑:我错误地描述了上面的潜在问题。在进一步的调查中,阻止信号处理的是主线程的调用join()
:Guido van Rossum 自己已经解释过 join 中的底层锁获取是 uninterruptible。这意味着信号实际上被推迟到整个线程完成 - 所以这实际上与所有无关raw_input
(只是后台线程阻塞以便连接没有完成的事实)。
python - 如何使精灵在 Pygame 和 Python 中的所有计算机上均匀移动
我遇到了均匀移动精灵的问题;目前我正在使用while循环来移动它们,问题是计算机越快,循环越快,精灵移动得越快。我在 pygame 中尝试了计时器/时钟功能(等待?),它在等待时冻结光标,因此使光标跳动。
多线程是答案吗?
这是我的问题的视频; http://www.youtube.com/watch?v=cFawkUJhf30
python - Python:'thread._local 对象没有属性'todo'
我目前正在使用线程和所有这些编写基于 python 的数据报服务器。
我遇到了以下问题:我正在使用多个分配线程将传入的包分配给不同的处理线程。在处理线程中,我使用 threading.local() 来跟踪线程局部变量。
我目前正在测试我的服务器在高负载期间的反应(大约 2 秒内 2000 个数据包),并且遇到了 local()-Object 的奇怪行为。
似乎它在一段时间内工作得很好,然后,在某个时候,它抛出了一个异常:
处理线程的一部分
和分配线程:
完整输出,包括所有调试打印:
正如您在日志中看到的那样,一切似乎都正常运行了一段时间,尽管它从未到达print "processing
处理线程的 main 函数中。
我已经在网络和 StackOverflow 上搜索过类似的问题,但找不到任何问题。在此先感谢您的帮助,并原谅我的编码风格,我现在只编程 Python 几天,并且仍在学习它的一些功能。
编辑:当然,这个服务器还有比这更多的东西。有一个主线程正在接收数据包并将它们发送到分配线程,还有一堆其他的东西在后台。此外,服务器还远未完成,但我想在开始处理其他事情之前让接收工作正常进行。
python - 如何在多线程中使用 python 多处理代理对象
我在标准客户端-服务器模型中使用 pyhton 的多处理包。
我在服务器中有几种类型的对象,我通过该BaseManager.register
方法注册,并通过代理从客户端使用(基于AutoProxy
类)。
当我从多个客户端线程使用这些代理时,我会弹出随机错误,并且在阅读了一些内容后,我发现代理实例本身不是线程安全的。从python 多处理文档中查看:
代理的线程安全
不要使用来自多个线程的代理对象,除非你用锁保护它。(使用相同代理的不同进程永远不会出现问题。)
我的场景非常适合这个。好的,我知道它为什么会失败。但我希望它工作:) 所以我寻求建议 - 使这个线程安全的最佳方法是什么?
我的特殊情况是(a)我 90% 的时间都在使用单个客户端线程,(b)代理背后的实际对象是线程安全的,以及(c)我想调用同一个代理的多个方法-同时对象。
和往常一样,互联网,帮助我的人将永生不死!那些尽力而为的人也可能获得安慰奖。
谢谢,
约纳坦
python - Python:从类内部向进程发送消息
这个问题可能不清楚 - 如果是这样,那可能是因为我并不完全确定如何提出这个问题 - 但这里是:
我有一个 Python 类,我想从中调用一个函数。
该类无权访问该函数应操作的数据-基本上,我希望该类向另一个调用该函数的进程发送消息。就像是:
然后调用Foo.bar(phonenumber)
应该具有执行的额外效果 - 这function
是data
如何实现的?
干杯!
python - Python中的可取消threading.Timer
我正在尝试编写一个倒计时到给定时间的方法,除非给出重新启动命令,否则它将执行任务。但我认为 Pythonthreading.Timer
类不允许取消计时器。
我知道上面的代码在某种程度上是错误的。希望能在这里得到一些善意的指导。
python - 当多线程python进程运行时,操作系统开始杀死进程
这是最奇怪的事情!
我有一个用 Python 编写的多线程客户端应用程序。我正在使用线程同时下载和处理页面。我会使用 cURL 多句柄,除了瓶颈肯定是此应用程序中的处理器(而不是带宽),因此使用线程池更有效。
我有一个 64b i7 摇摆 16GB RAM。仡。我在听 Pandora 并拖钓 Stackoverflow 和 BAM 的同时启动了 80 个线程!父进程有时会以消息结束
Killed
其他时候,单个页面(这是它在 Chrome 中的自己的进程)会死掉。其他时候整个浏览器崩溃。
如果你想看一些代码,这里是它的要点:
这是父进程:
这是 ClientThread 的要点:
编辑:哦,对了......忘了问这个问题......应该很明显:为什么我的进程会被杀死?它发生在操作系统级别吗?内核级别?这是由于我可以拥有的打开 TCP 连接数的限制吗?我一次可以运行的线程数是否有限制?的输出cat /proc/sys/kernel/threads-max
是257841
。所以……我不认为是这样……
我想我明白了……好吧……我的驱动器上根本没有交换空间。现在有没有办法创建一些交换空间?我正在运行 Fedora 16。有交换...然后我启用了我所有的 RAM,它神奇地消失了。拖尾/var/log/messages
我发现了这个错误:
python - Python多线程设计建议
我有一个关于我当前线程设计的问题——我当前的进程产生一个新线程并继续主线程直到终止条件。该进程一直等到所有线程都完成后才终止。我遇到的问题是产生的每个新线程都需要查看产生的前一个线程是否已完成。我应该简单地设置一个队列并只使用一个线程来处理所有任务吗?或者是否有可能产生一个线程,以某种方式检查前一个线程是否已完成并仅在该线程完成后才处理任务?
感谢您的帮助