1. 程式人生 > >在不同的python直譯器之間進行通訊

在不同的python直譯器之間進行通訊

當我們執行多個python直譯器例項,還有可能是在不同的機器上時,我們可能會需要通過訊息在不同的直譯器之間交換資料。

    我們需要的不是複雜的訊息佇列,而是簡單的交換無損資訊的話,那麼multiprocessing.connection庫正是我們所需要的。只需要使用幾個簡單的原語便可以輕鬆將各個直譯器聯絡在一起並交換資料了。

    下面看示例:

#一號直譯器執行扮演伺服器角色
from multiprocessing.connection import Listener

def client(conn):
    while True:
        try:
            msg =
conn.recv() print(f'Server receive the msg:{msg}') conn.send('Got it') except: print('Server Error') break def server(address,authkey): serv = Listener(address,authkey=authkey) while True: try: clients = serv.accept(
) client(clients) except: print('Server Error') break server(('',25000),authkey=b'AmosH'

    上面的程式碼是一號直譯器的伺服器程式碼,下面是執行時的效果圖:


    可以看到,所有由send()方法傳送的物件都完整無損的被recv()方法接收到了。任何同pickle相容的物件都可以在連線之間傳遞和接收。

    如果知道這些直譯器會執行在同一臺機器上,那麼可以利用網路作為替代方案。比如使用UNIX的域socket或者Windows的命名管道,只要簡單的把地址改為檔名就可以了,示例如下:

#UNIX
s = Listener('/tmp/myconn',authkey = authkey)
#Windows
s = Listener(r'\\.\pipe\myconn',authkey = authkey)

    一般來說,不應該使用multiprocessing模組來實現面向公眾型的服務。傳遞給Client()和Server()的authkey在這裡是為了幫助認證連線兩端的節點。使用錯誤的金鑰來連線會產生異常。

    注意,這個模組最好適用於能夠長時間執行的連線,而不是大量的短連線。

    如果需要對連線實現更多的底層控制,那麼就不要使用multiprocessing模組。比方說,如果要支援超時、非阻塞I/O或者任何類似的特性,那麼最好使用另一個不同的庫或者直接在socket上實現這些特性。

    微信公眾號:進擊的程式碼Amos

    每天更新Java、python學習資料、技術乾貨。分享見解,共同成長。

    關注公眾號,免費獲取眾多電子版經典教材。

相關推薦

不同python直譯器之間進行通訊

當我們執行多個python直譯器例項,還有可能是在不同的機器上時,我們可能會需要通過訊息在不同的直譯器之間交換資料。     我們需要的不是複雜的訊息佇列,而是簡單的交換無損資訊的話,那麼multiprocessing.connection庫正是我們所需要的

Oracle中不同日期格式之間進行日期的大小比較

專案中經常需要判斷日期之間的大小,但是不知道不同格式之前的日期比較大小是否可以直接比較,今天寫了程式碼實驗了下,發現是可以的:程式碼:declare   d1 date;  d2 date;  d3 date;  d4 date;begin  --精確到月  d1 := to

碎片和活動之間進行通訊、碎片之間進行通訊

為了方便碎片和活動之間進行通訊,FragmentManager提供了一個類似於findViewById()的方法,如下所示: //在活動中呼叫碎片的方法: RightFragment rightFragment = (RightFragment)getFrag

python程序之間通訊方式---------訊息佇列

  圖中有程序A和程序B,然後為了在兩個程序中通訊,就在記憶體中開闢了一個空間叫佇列C,多個程序都可以對這個佇列C可見, 接下來  就是A程序往C佇列裡放訊息,一次放一個,一次放一個訊息,程序B作為接收端,一次從佇列裡拿出一個訊息,一次  拿出一個訊息,這樣看起來和管道基本差不多,但實際上是python當中,

Fragment和Activity之間進行通訊

雖然fragment都是鑲嵌入在活動中顯示的,可是實際上它們的關係並沒有那麼親密,你可以看出,fragment和activity都是各自存在於一個獨立的類當中,它們之間並沒有那麼明顯的方式來直接進行通訊,如果你想在activity中呼叫fragment裡的方法或者在frag

JavaFX的Controller之間進行通訊

javafx的Controller例項是由javafx框架程式碼自動建立並管理的,我嘗試去獲取javafx託管的Controller例項,但使用網上的方法,都是獲取到了一個新的Controller例項,這顯然是不符合要求的,那麼我們可以自己建立儲存管理一份Con

Android 學習隨筆之 碎片和活動之間進行通訊

資料來源於第一行程式碼Android第二版中提到在活動中獲取碎片例項的方法RightFragment rightFragment=(RightFragment)getFragmentManager().

Fragment的碎片與活動之間進行通訊

為了方便碎片和活動之間進行通訊,FragmentManager提供了一個類似於findViewById()的方法,專門用於從佈局檔案中獲取碎片的例項。 RightFragment rightFragment = (RightFragment)getSuppor

Android手機通過Wifi與PC機之間進行通訊問題 (有程式碼)

這個一個手機客戶端的程式,伺服器程式在PC上。手機和電腦處於同一個區域網內,現在的問題是我摁下發送按鈕 PC上沒有顯示。請大神幫忙 package com.example.send; import java.io.IOException; import java.io.In

【Android】53、碎片和活動之間進行通訊

本篇博文最後修改時間:2016年9月7日,16:48。 一、簡介 本篇介紹碎片和活動之間進行通訊。 二、實驗平臺 系統版本:Windows7 家庭普通版 32位作業系統。 博主:思跡 宣告

如何讓不同網段的主機進行通訊?如何讓虛擬機器上網? (閘道器 、路由器 、dns 的實際應用)

閘道器 路由器 dns 的實際應用: 閘道器: 是一個可直接到達的IP路由器的IP地址,閘道器與本機IP地址必須處在同一網段,一臺主機可以有多個閘道器 路由器: 能夠實現跨網段進行網路訪問,只有開啟了火牆策略才叫路由器,否則它只是一個雙網絡卡 dns: 是英文Domain

設計多個非本地IP之間進行TCP/UDP通訊

工作需要,遇到過一個問題,需要模擬多個非本地IP之間進行TCP/UDP通訊,一開始以為非常簡單,直到遇到錯誤“非法IP”“該請求地址無效”"指定了無效的IP地址"這些錯誤,就是本地模擬TCP/UDP時出了本地迴環地址127.0.0.1其它地址都是無法識別的,程式不知道怎麼建立套接字,也不知道傳送給誰

Visual Studio進行Python程式設計(新增自定義Python直譯器

  這篇部落格主要介紹一下在Visual Studio下安裝python開發環境,在vs下配置python開發環境的部落格不少,但是都介紹的是使用vs提供的預設的python直譯器,很少有使用自己安裝的直譯器的文章,因此今天就稍作介紹 安裝Visual Studio   安裝vi

Python 和三菱FX5U 進行通訊

三菱FX5U 支援SMTP 協議,可利用Python 的Socket 通訊按照三菱的協議格式進行通訊,上位機作為客戶端,PLC作為伺服器 """ author: alai date:2018/05/01 """ import socket import time import xlwt,xl

虛擬機器Ubuntu之間相互通訊以及虛擬機器與宿主機進行通訊

虛擬機器Ubuntu之間相互通訊以及虛擬機器與宿主機進行通訊 在Vmware workstation上開啟兩臺虛擬機器 1.在設定裡將兩臺虛擬機器改成橋接模式 2.使用命令列靜態配置兩臺虛擬機器的IP地址分別為 虛擬機器Ubuntu1:192.168.0.3 虛擬機器Ubuntu2:19

跨程序通訊之AIDL-----不同應用程式之間跨程序

AIDL,通俗來說就是兩個Android應用要進行通訊,且不能通過網路雲伺服器的方式進行資料互動,只能呼叫本地函式庫的機制來實現,這時Android系統提供AIDL的機制來實現Android的跨程序通訊(使用者程序之間是相對封閉的,無法直接訪問資料)。 我們先不

不同VLAN之間相互通訊的兩種方式 (單臂路由、三層交換)

2、將PC5和PC6分別連線到交換機SW3的f0/6和f0/1上,然後配置PC5的IP地址為192.168.2.1/24,閘道器為192.168.2.254。PC6的IP地址為192.168.1.1,閘道器為192.168.1.254。然後用PC5 ping PC6,看是否能ping通。

ZeroMQ例項-使用ZeroMQ進行windows與linux之間通訊

1、本文包括   1)在windows下使用ZMQ   2)在windows環境下與Linux環境下進行網路通訊 2、在Linux下使用ZMQ 3、在Windows環境下使用ZMQ   3.1)安裝Windows環境下的ZMQ開發庫,可以到ZMQ官網進行下載,或者到百度網盤進行下

python中簡單使用socket進行通訊

客戶端: import socket link = socket.socket(socket.AF_INET, socket.SOCK_STREAM) link.connect(("192.168.43.64", 80)) while True: data = input(

客戶端與伺服器之間分別通過TCP和UDP進行通訊

一:TCP/IP協議的應用一般採用客戶/伺服器模式,因此在實際應用中,必須有客戶和伺服器兩個程序,並且首先啟動伺服器,其系統呼叫時序圖如下。面向連線的協議(如TCP)的套接字系統呼叫如圖2.1所示: 注意:伺服器必須首先啟動,直到它執行完accept()呼叫,進入等待狀態後