Articles of multithreading

如何编程python线程,以便用户可以使用LINUX中提供的监视工具来区分它们

例如,我可以很容易地将线程命名为python程序中的参考: #!/usr/bin/python import time import threading class threadly(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): while True: time.sleep(4) print "I am", self.name, "and I am barely awake." slowthread=threadly("slowthread") slowthread.start() anotherthread=threadly("anotherthread") anotherthread.start() while True: time.sleep(2) print "I will never stop running" print "Threading enumerate:", threading.enumerate() print "Threading active_count:", threading.active_count() print 输出如下所示: I am slowthread […]

当另一个线程在Perl中停止时停止线程

嗨我试图停止或杀死线程$ t2时$ t1停止 。 这里是代码: #!/usr/local/bin/perl use strict; use warnings; use threads; use threads::shared; use Time::HiRes qw( sleep ); print "Starting main program\n"; my @threads; my $t1 = threads->new(\&c1); my $t2 = threads->new(\&progress); #my $t2 = threads->new(\&c2); push(@threads,$t1); push(@threads,$t2); my $ret1 = $t1->join(); print "Thread returned: $ret1\n"; $t2->join(); if (!($t1->is_running())) { $t2->exit(); } print "End […]

使用pthread_join()

我想知道,如果我们做一个没有pthread_join的pthread_create ,会发生什么? 谁将“清理”“未join”线程的所有内存。

在Python 2.7中使用线程smtpd的linux和os x之间奇怪的行为差异

我有一个线程的smtp服务器,在Linux(ubuntu 14.04和fedora 20)上停留的时间比OS x(10.8)多20秒。 from email.parser import Parser from smtpd import SMTPServer as StdLibSmtpServer from smtplib import SMTP from threading import Thread import asyncore import re import select import logging import os.path import datetime import json import random from socket import gethostname class SmtpServer(StdLibSmtpServer, object): def __init__(self, listen='localhost', port=10025, forward_address='localhost', forward_port=10026): super(SmtpServer, self).__init__((listen, port), None) […]

C ++执行临时文件作为bash脚本

我有一个需要运行程序的程序,我们将在我们的Linux(CentOS)集群上并行调用externalProg – 或者说,它需要运行多个externalProg实例,每个实例都在不同的内核上运行。 每个“线程”根据几个参数创build3个文件 – externalProg的input,一个告诉externalProg如何执行我的文件的命令文件,以及一个用于设置环境的bash脚本(调用制造商提供的安装脚本)以及实际上用我的input调用externalProg。 因为这需要与未知数量的并发线程并行,我不想冒险覆盖另一个线程的文件,我正在创build临时文件 mkstemp("PREFIX_XXXXXX") 为这些input文件。 外部程序运行后,我提取相关数据并存储,并closures临时文件(因此删除它们)。 我们将调用创build的文件(实际上有一个基于上述模板的名称) tmpInputs – Inputs to externalProg tmpCommand – Input that tells externalProg how to execute tmpInputs tmpBash – bash script to set up and call externalProg with my inputs 文件tmpBash看起来像 source /path/to/setup/script # Sets up environment variables externalProg < /path/to/tmpCommand 其中tmpCommand只是一个简单的文本文件。 我遇到的问题实际上是执行bash脚本。 在我的程序中,我打电话 ostringstream launchcmd; […]

使用os杀死python线程

我已经多次问过类似的问题,但还是找不到合适的解决scheme。 我有和外部的function,在某些情况下可能会运行很长时间。 我想在30秒之后中断它。 我怎么做? 线程是好的,但我不能停止他们(我没有访问外部函数的代码) 多处理也不是一个选项,因为我在mod_wsgi下运行站点。 有没有可靠的方法来停止线程? 也许使用os.system或os.kill。 如果是,那么如何? 外部function只会执行一些命令,没有networking连接或文件打开。 所以我只需要停下来清理 我的代码(实际上是从一些来源): def time_limit(timeout): def internal(function): def internal2(*args, **kw): class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.result = None self.error = None def run(self): try: self.result = function(*args, **kw) # this is external except Exception as e: self.error = e def _stop(self): if self.isAlive(): threading.Thread._Thread__stop(self) c = […]

执行的线程数比创build的多

我正在学习线程编程。 在做下面的例子时,我得到了未定义的行为。 static void* print_thread_attr (void* param) { pthread_attr_t attr; int detach_state = PTHREAD_CREATE_JOINABLE; pthread_getattr_np (pthread_self(), &attr); pthread_attr_getdetachstate (&attr, &detach_state); pthread_attr_destroy (&attr); printf("Detach state of thread [%u] pid [%d] is %s\n", pthread_self(), getpid(), (PTHREAD_CREATE_JOINABLE == detach_state)? "JOINABLE THREAD":"DETACHED THREAD"); return NULL; } void test_thread_attributes () { pthread_t thread_id1; pthread_t thread_id2; pthread_attr_t attr; printf("main pid [%d]\n", […]

在C ++中,我可以使用multithreading工具将UNIX信号与主程序同步吗?

使用sigaction设置的信号处理程序是否在自己的线程中运行? 我可以使用Pthreads工具来同步我的信号处理程序与我的主程序,如Pthreads mutexes吗? 我可以使用C ++ 11工具,如mutex和atomic ? 对不起,如果问题有点过于笼统,但我真的很困惑信号和线程之间的关系。 我正在研究Linux,但是这个问题一般适用于UNIX。

将GDB附加到Linux中正在死亡的进程中

我想将gdb附加到一个正在死亡的进程中,因为程序在生产环境中运行,我需要在那里debugging它,如果我使用gdb打开程序,速度会变慢,而且计算机也不是那么好。 我试图在应用程序中捕获信号,并在那里附加gdb,但是如果我自己发送信号,它就会起作用。 当程序停滞时(multithreading程序,主线程发生死锁或者卡住(或者显然卡住了)),并且用户强制它在桌面环境(LXDE)中退出,我不能捕捉到任何信号。 该程序是PySide的graphics界面的所有python。 只关心linux。 我的想法是创build一个内核驱动程序,并尝试过程终止或信号发送在那里,但因为这将是一个麻烦,我想问是否有一些工具,这种事情或一些信息,我可以做用于。 谢谢。

我们是否确实需要与“PTHREAD_MUTEX_ROBUST”相反的属性“PTHREAD_MUTEX_STALLED”的互斥锁?

我正在阅读APUE第12章(第三版),它说:我们可以设置PTHREAD_MUTEX_STALLED或PTHREAD_MUTEX_ROBUST到互斥量。 但是我不认为我们需要使用属性PTHREAD_MUTEX_STALLED互斥,互斥量应该总是“健壮的”,这样我们才能被通知,如果locking互斥量的那一边是死的。 如果互斥体“停滞”,我们将永远悬浮。 而且我知道Windows的互斥体总是“健壮”,如果locking互斥体的那一面死了,我们将会收到错误WAIT_ABANDONED通知。 那么,在什么样的情况下,我们不得不使用“停滞”的互斥体,而不是“健壮的”互斥体呢? 感谢您的关注。