Multiprocessing ile program nasil kapatabilirim?

Iki tane fonksion var birisi socket islemi yapiyor diyeri ise time.sleep(20) komutundan sonra exit() islemi yapiyor yani program kapaniyor simdi ben multiprocessing olayini anlamak icin bu basit programi yazdim burada time.sleep() olan fonksionu multiprocessing ile calisdiriyorum diyer fonksionda kendi islemi goruyor ben istiyorumki 3 saniyeden sonra program kapansin yani exit() islemi gerceklesin ama None gibi bir deyer donuyor .Ben belli bir zamandan sonra programin kapanmasini istiyorum bunu multiprocessing ile nasil yapa bilirim?

Kodlarınızı burada paylaşmayı düşünüyor musunuz?

from multiprocessing import Process
import time
import os

def islem():
    print("porcess run")
    time.sleep(3)
    p.terminate()


p = Process(target = islem)
p.start()

def dongu():
    while True:
        name = input("Name:")
        print(name)
        if name == 'q':
            exit()
        else:
            continue
dongu()

aslinda kod basit ben burada multiprocessing ile programi sonlandirmak istiyorum asagdaki input islemini bura katmadan ama sonlanmiyor.Maksadim isin mantigini anlamak burada sadece test icin bunu yazdim sonlandirmayi basarirsam baska programda kullanmak istiyorum

thread ilede denedim olmadi program sonlanmiyor

Yapmak istediğiniz işlemi threading ile yapabilirsiniz. Mesela aşağıdaki kodları bir inceleyin isterseniz:

import time
import threading


def islem():
    print("islem basladi...")
    time.sleep(100)


t = threading.Thread(target=islem)
t.daemon = True
t.start()
t.join(3)  # 3 saniye sonra program sonlanacak.
print("islem bitti...")

Multiprocessing hakkında çok bir bilgim yok ama threading ile karşılaştırmak için aşağıdaki örneği bir inceleyin isterseniz.

import subprocess
import multiprocessing

with open("test.py", "w") as dosya:
    dosya.write("import time;print('islem basladi...');time.sleep(100)")


def islem():
    subprocess.call("python test.py 1", shell=True)


p = multiprocessing.Process(target=islem)
p.start()
p.join(3)  # 3 saniye sonra program sonlanacak.
p.terminate()
print("islem bitti.")

Normalda programi kapatmak icin exit() kullaniyorum ama bunu thread icinde kullanicinda neden calismiyior ayni anda iki tane fonk calisdiriyorum bir tanesi thread ile diyeri normal calisiyor thread ile cagirdigim fonk icinde exit() komutu neden programi tumden sonlandirmiyor?

yada ben birseyleri yalnis yaziyorum

Çünkü threadler aktif edildikten sonra programı kapatsanız da çalışan thread olduğu müddetçe program tam kapanmış sayılmaz. Thread’i daemonic hale getirirseniz, ana iş parçacığı sonlanınca diğer thread de sonlanır.

1 Beğeni

Sistemde çalışan bir processi neden multiprocessing ile sonlandırmak istiyorsunuz ki?

hmm anladim oysa ben thread islemi uzerinden programi kapatmak istiyorum demek boyle olmuyor yalniz ana program sonlandikda threadi sonlandira bilirim

Hayır, bunu söylemedim. daemonic olarak ayarlanmış olan thread, ana program (main_thread) sonlanınca sonlanır. Daemonic olmayan threadler ise sonlanmaz.

1 Beğeni

soyle bir sey yapmaya calisyordum socket ile bir program yazdim iki bilgisayar arasinda dosya falan gonderiyordu program 10 dakika acik kaldikdan sonra kapanmasini istiyordum bunuda baska bir fonk cinde time.sleep() komutuyla yapmaya calisiyordum orada belli bir zaman girecekdim o zaman doldukda program sonlanacakdi belkide yalnis bir yontem izlemisim

donguler kullanmadan server.py dosyasinin 5 veya 10 dakika icinde nasil sonlandira bilirim ?

Şuradaki gibi bir şey işinizi görmez mi?

1 Beğeni

Nasıl yani? Biraz daha açıklayabilir misiniz?

diyelim bir chat programi yazdim socket ile bu program disardan bir mudahale olmayinca calismaya devam ediyor ben bu programin 5 dakika sonra kendiliyinden kapanmasini istiyorum bunu nasil yapa bilirim?

bakiyorum simdi hocam insallah istediyim bu olur

Nasıl bir chat programı yazdınız bilmiyorum ama, umarım aşağıdaki kodların size yardımı dokunur.

import socket
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 1234))
s.listen(10)


def accept():
    while True:
        conn, addr = s.accept()
        print(addr, "is connected")


t = threading.Thread(target=accept)
t.daemon = True
t.start()
t.join(3)  # 3 saniye sonra program sonlanacak.

Bunu bir deneyeyim qaliba isimi gorur