最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python程序主動(dòng)退出進(jìn)程的五種方式

 更新時(shí)間:2024年02月27日 11:35:54   作者:hellocsz  
對(duì)于如何結(jié)束一個(gè)Python程序或者用Python操作去結(jié)束一個(gè)進(jìn)程等,Python本身給出了好幾種方法,而這些方式也存在著一些區(qū)別,對(duì)相關(guān)的幾種方法看了并實(shí)踐了下,同時(shí)也記錄下,需要的朋友可以參考下

一、使用os.kill()

os.kill()是一種向進(jìn)程發(fā)送信號(hào)的方法,可以用來(lái)強(qiáng)制結(jié)束一個(gè)進(jìn)程的運(yùn)行。如果你的程序中包含有線程,用這種方式絕對(duì)沒(méi)錯(cuò)!當(dāng)使用os.kill()方法結(jié)束一個(gè)進(jìn)程時(shí),需要指定該進(jìn)程的PID(進(jìn)程號(hào)),同時(shí)需要指定信號(hào)類型。下面是使用os.kill()方法結(jié)束指定ID的程序運(yùn)行的示例代碼:

import os
 
pid = os.getpid() # 獲取當(dāng)前進(jìn)程的PID
os.kill(pid, signal.SIGTERM) # 主動(dòng)結(jié)束指定ID的程序運(yùn)行

二、使用os._exit()

os._exit()是一種基于系統(tǒng)調(diào)用的退出方式,它可以忽略所有的清理活動(dòng),包括所有的緩存和終止信號(hào)處理器等。當(dāng)使用os.exit()方法退出時(shí),Python解釋器將立即終止程序的運(yùn)行,不會(huì)執(zhí)行任何清理操作并且不會(huì)返回狀態(tài)碼。下面是使用os._exit()方法退出程序的示例代碼:

import os
 
os._exit(0) # 退出程序,不返回狀態(tài)碼

三、使用raise SystemExit()

raise SystemExit()是一種簡(jiǎn)單的退出方式,它可以引發(fā)一個(gè)SystemExit異常,終止程序執(zhí)行,并且可返回一個(gè)狀態(tài)碼。在使用raise SystemExit()方法退出時(shí),如果指定了狀態(tài)碼,則會(huì)返回該狀態(tài)碼,否則將返回0。下面是使用raise SystemExit()方法退出程序的示例代碼:

raise SystemExit(0) # 退出程序,返回狀態(tài)碼0

四、使用exit()

exit()是一種基于終端指令的退出方式,它可以退出Python解釋器并返回狀態(tài)碼。當(dāng)使用exit()方法退出時(shí),會(huì)先執(zhí)行一些清理工作,如關(guān)閉文件等,然后退出Python解釋器。下面是使用exit()方法退出程序的示例代碼:

exit(0) # 退出程序,返回狀態(tài)碼0

五、使用sys.exit()

sys.exit()是一種常用的退出當(dāng)前進(jìn)程的方法,它可以終止一個(gè)程序的運(yùn)行,并可以返回一個(gè)狀態(tài)碼。當(dāng)sys.exit()被調(diào)用時(shí),程序?qū)⒘⒓赐V箞?zhí)行,所有的finally子句(如果有的話)將被忽略,并且返回一個(gè)標(biāo)識(shí)狀態(tài)的整數(shù)。下面是使用sys.exit()方法退出程序的示例代碼:

import sys
 
sys.exit(0) # 退出程序,返回狀態(tài)碼0

就像websocket客戶端,當(dāng)服務(wù)端主動(dòng)關(guān)閉后,客戶端直接退出: 

服務(wù)端代碼:

from flask import Flask
from flask_sock import Sock
 
app = Flask(__name__)
sock = Sock(app)
# 創(chuàng)建全局的ws對(duì)象數(shù)組
ws_list = []
ws_closed = []
 
 
@app.route('/')
def index():
    return "你好,世界"
 
 
@app.route('/ws')
def websocket():
    return """
    <!doctype html>
    <html>
      <head>
        <title>Flask-Sock Demo</title>
      </head>
      <body>
        <h1>Flask-Sock Demo</h1>
        <div id="log"></div>
        <br>
        <form id="form">
          <label for="text">Input: </label>
          <input type="text" id="text" autofocus>
        </form>
        <script>
          const log = (text, color) => {
            document.getElementById('log').innerHTML += `<span style="color: ${color}">${text}</span><br>`;
          };
          const socket = new WebSocket('ws://' + location.host + '/echo');
          socket.addEventListener('message', ev => {
            log('<<< ' + ev.data, 'blue');
          });
          document.getElementById('form').onsubmit = ev => {
            ev.preventDefault();
            const textField = document.getElementById('text');
            log('>>> ' + textField.value, 'red');
            socket.send(textField.value);
            textField.value = '';
          };
        </script>
      </body>
    </html>
    """
 
 
def handle_sync(data, self):
    # 同步各端ws消息
    for ws in ws_list:
        if not ws.connected:
            ws_closed.append(ws)
        elif data and ws != self:
            ws.send(data)
    # 刪除已斷開(kāi)的鏈接
    for cl in ws_closed:
        ws_list.remove(cl)
    ws_closed.clear()
    print(f"live num: {len(ws_list)}, done num: {len(ws_closed)}")
 
 
@sock.route('/echo')
def echo(self):
    global ws_list
    ws_list.append(self)
    # 同步消息和關(guān)閉ws clear
    handle_sync(None, self)
    while True:
        print(f"global ws list: {len(ws_list)}")
        # 判斷是斷開(kāi)連接還是還在鏈接
        data = self.receive()
        print(f"receive client message: {data}")
        self.send(data)
        # 同步消息和關(guān)閉ws clear
        handle_sync(data, self)
 
 
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8989)

客戶端代碼:

import os
import signal
import threading
import time
 
import websocket
 
 
def on_open(ws):
    print("連接已建立")
    # 發(fā)送消息給服務(wù)器
    ws.send("Hello, server!")
 
 
def on_message(ws, message):
    print("收到消息:", message)
 
 
def on_close(ws, arg1, arg2):
    print("連接已關(guān)閉")
    pid = os.getpid()  # 獲取當(dāng)前進(jìn)程的PID
    os.kill(pid, signal.SIGTERM)
 
 
def on_error(ws, error):
    print("發(fā)生錯(cuò)誤:", error)
 
 
# 創(chuàng)建WebSocket連接
ws = websocket.WebSocketApp("ws://192.168.110.196:8989/echo",
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close,
                            on_error=on_error)
 
 
def sub_task():
    while True:
        print("子線程運(yùn)行")
        time.sleep(2)
 
 
def run():
    t = threading.Thread(target=sub_task)
    t.start()
    # 啟動(dòng)WebSocket客戶端
    ws.run_forever()
 
 
if __name__ == '__main__':
    run()

以上就是python程序主動(dòng)退出進(jìn)程的五種方式的詳細(xì)內(nèi)容,更多關(guān)于Python程序退出進(jìn)程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談Python3.10 和 Python3.9 之間的差異

    淺談Python3.10 和 Python3.9 之間的差異

    多年來(lái),Python 進(jìn)行了大量升級(jí),并且在新版本中添加了許多功能。本文就詳細(xì)的介紹 一下Python3.10 和 Python3.9差異,感興趣的朋友可以了解一下
    2021-09-09
  • 解決python ogr shp字段寫入中文亂碼的問(wèn)題

    解決python ogr shp字段寫入中文亂碼的問(wèn)題

    今天小編就為大家分享一篇解決python ogr shp字段寫入中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python如何輸出整數(shù)

    Python如何輸出整數(shù)

    在本篇文章里小編給大家分享的是關(guān)于Python輸出整數(shù)實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python箱型圖處理離群點(diǎn)的例子

    Python箱型圖處理離群點(diǎn)的例子

    今天小編就為大家分享一篇Python箱型圖處理離群點(diǎn)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法

    將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法

    大多數(shù)數(shù)據(jù)科學(xué)在線課程都把Jupyter Notebook作為教學(xué)媒介,這是因?yàn)槌鯇W(xué)者在Jupyter Notebook的單元格中編寫代碼,比編寫包含類和函數(shù)的腳本更容易,這篇文章主要給大家介紹了關(guān)于將Jupyter?Notebook(.ipynb)文件轉(zhuǎn)換為Python(.py)文件的3種方法,需要的朋友可以參考下
    2023-10-10
  • Python的sqlite3模塊中常用函數(shù)

    Python的sqlite3模塊中常用函數(shù)

    sqlite3模塊是Python中的內(nèi)置模塊,用于與SQLite數(shù)據(jù)庫(kù)交互,本文就來(lái)介紹一下Python的sqlite3模塊中常用函數(shù),感興趣的可以了解一下
    2023-10-10
  • Python之urlencode和urldecode案例講解

    Python之urlencode和urldecode案例講解

    這篇文章主要介紹了Python之urlencode和urldecode案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Python中斷點(diǎn)調(diào)試pdb包的用法詳解

    Python中斷點(diǎn)調(diào)試pdb包的用法詳解

    pdb(python debugger) 是 python 中的一個(gè)命令行調(diào)試包,為 python 程序提供了一種交互的源代碼調(diào)試功能,下面就跟隨小編一起學(xué)習(xí)一下它的具體使用吧
    2024-01-01
  • 實(shí)現(xiàn)?Python?腳本生成命令行

    實(shí)現(xiàn)?Python?腳本生成命令行

    這篇文章主要介紹了實(shí)現(xiàn)?Python?腳本生成命令行,文章通過(guò)定義一個(gè)?scrape?方法展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • python?Gooey庫(kù)將命令行程序轉(zhuǎn)換成圖形用戶界面GUI應(yīng)用

    python?Gooey庫(kù)將命令行程序轉(zhuǎn)換成圖形用戶界面GUI應(yīng)用

    這篇文章主要為大家介紹了python?Gooey庫(kù)將命令行程序轉(zhuǎn)換成圖形用戶界面GUI應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評(píng)論

图木舒克市| 读书| 综艺| 太康县| 项城市| 巩留县| 昭苏县| 江陵县| 罗源县| 鄯善县| 应用必备| 高密市| 东海县| 朝阳市| 安阳县| 健康| 兴隆县| 桐庐县| 五莲县| 贵德县| 延寿县| 巨野县| 甘洛县| 灵武市| 防城港市| 宁夏| 房产| 咸阳市| 汉中市| 太仆寺旗| 四子王旗| 连州市| 辉县市| 英吉沙县| 雷州市| 黑水县| 松阳县| 曲麻莱县| 昌乐县| 丰都县| 永川市|