में इंटरप्टिबल थ्रेड शामिल हो गया है क्या थ्रेड को समाप्त करने का इंतजार करने का कोई तरीका है, लेकिन अभी भी संकेतों को रोकना है?पाइथन
निम्नलिखित सी कार्यक्रम पर विचार करें:
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
void* server_thread(void* dummy) {
sleep(10);
printf("Served\n");
return NULL;
}
void* kill_thread(void* dummy) {
sleep(1); // Let the main thread join
printf("Killing\n");
kill(getpid(), SIGUSR1);
return NULL;
}
void handler(int signum) {
printf("Handling %d\n", signum);
exit(42);
}
int main() {
pthread_t servth;
pthread_t killth;
signal(SIGUSR1, handler);
pthread_create(&servth, NULL, server_thread, NULL);
pthread_create(&killth, NULL, kill_thread, NULL);
pthread_join(servth, NULL);
printf("Main thread finished\n");
return 0;
}
यह एक के बाद एक दूसरा और प्रिंट समाप्त होता है:
:Killing
Handling 10
इसके विपरीत, यहां में यह लिखने के लिए अजगर मेरी प्रयास है
#!/usr/bin/env python
import signal, time, threading, os, sys
def handler(signum, frame):
print("Handling " + str(signum) + ", frame:" + str(frame))
exit(42)
signal.signal(signal.SIGUSR1, handler)
def server_thread():
time.sleep(10)
print("Served")
servth = threading.Thread(target=server_thread)
servth.start()
def kill_thread():
time.sleep(1) # Let the main thread join
print("Killing")
os.kill(os.getpid(), signal.SIGUSR1)
killth = threading.Thread(target=kill_thread)
killth.start()
servth.join()
print("Main thread finished")
यह प्रिंट:
Killing
Served
Handling 10, frame:<frame object at 0x12649c0>
मैं इसे कैसे सी संस्करण की तरह व्यवहार कर सकता हूँ?
'जीसीसी -pthread thread.c' तरह से करता है, तो किसी को भी तरह त्रुटियों का सामना करना पड़ा सी स्रोत संकलित करने के लिए है मैं अकेले 'gcc thread.c' कोशिश कर रहा हूं। – ViFI