2

私はPythonが初めてで、かなり長い間これに苦労しています。さて、サーバーにログインし、サーバーのステータスが変化したかどうかを確認するために10秒ごとにサーバーに常にpingを送信するプログラムがあります。同じスクリプトに、サーバーにメッセージを送信する関数があります。

send メソッドの簡単な例:

def send(self, message):

   url = ("https://testserver.com/socket?message=%s") % (message)

   req = urllib2.Request(url, None, None)
   response = urllib2.urlopen(req).read()

   print response

このメソッドの実行中に別のスクリプトからこのメソッドを呼び出すことはできますか? 同じセッションを使用する場合と同様です。この関数を呼び出すスクリプトを実行すると、そのスクリプトの現在のインスタンスを使用する代わりに新しいインスタンスが作成され、サーバーに接続されていないという例外がスローされるようです。

ノブの質問で申し訳ありません。しばらくグーグルを試してみましたが、答えが見つからないようです。私は以下を読みましたが、これらは問題を解決しませんでした:

クラス内の Python 呼び出し関数

現在の関数を変数に取得するPythonコード?

こんにちは@nFreeze返信ありがとうございます私はZeroRPCを使用しようとしましたが、あなたが与えたスクリプト/例を実行するたびに(明らかに編集されています)、このエラーに遭遇します:

Traceback (most recent call last):
    File "C:\Users\dwake\Desktop\Web Projects\test.py", line 1, in <module>
import zerorpc
    File "C:\Python27\lib\site-packages\zerorpc\__init__.py", line 27, in <module>
from .context import *
    File "C:\Python27\lib\site-packages\zerorpc\context.py", line 29, in <module>
import gevent_zmq as zmq
    File "C:\Python27\lib\site-packages\zerorpc\gevent_zmq.py", line 33, in <module>
import gevent.event
    File "C:\Python27\lib\site-packages\gevent\__init__.py", line 48, in <module>
from gevent.greenlet import Greenlet, joinall, killall
    File "C:\Python27\lib\site-packages\gevent\greenlet.py", line 6, in <module>
from gevent.hub import greenlet, getcurrent, get_hub, GreenletExit, Waiter
    File "C:\Python27\lib\site-packages\gevent\hub.py", line 30, in <module>
greenlet = __import__('greenlet').greenlet
ImportError: No module named greenlet

geventをインストールしましたが。これを修正する方法がわかりません。かなりの時間グーグルで検索しています。

4

2 に答える 2

3

あなたが探しているのは、RPCサーバーと呼ばれるものです。外部クライアントがアプリで公開された機能を実行できるようにします。幸いなことに、python には多くのRPC オプションがあります。ZeroRPCは使いやすく、node.js をサポートしているため、おそらく私のお気に入りです。以下は、ZeroRPC を使用して send メソッドを公開する方法の例です。

アプリ内 (サーバー)

import zerorpc

class HelloRPC(object):
    def send(self, message):
        url = ("https://testserver.com/socket?message=%s") % (message)
        req = urllib2.Request(url, None, None)
        response = urllib2.urlopen(req).read()
        return response    
s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()

他のアプリ (クライアント) で

import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
print c.send("RPC TEST!")
于 2013-05-27T14:14:29.987 に答える