Apa pilihan saat ini untuk melakukan RPC dengan Python? [Tutup]

131

Sebenarnya, saya sudah melakukan beberapa pekerjaan dengan Pyro dan RPyC, tetapi ada lebih banyak implementasi RPC dari keduanya. Bisakah kita membuat daftar mereka?

Protokol berbasis Python asli:

Kerangka kerja RPC dengan banyak protokol yang mendasarinya:

Kerangka kerja berbasis JSON-RPC:

SABUN MANDI:

Kerangka kerja berbasis XML-RPC:

Lainnya:

edomaur
sumber
3
Itu benar-benar tergantung pada konteksnya. Internet? LAN? Situs web? Perhitungan terdistribusi? Prototipe cepat? Bandwidth? Ukuran pesan?
ddaa
@silentghost: selesai. Saya lebih suka untuk tidak menetapkan "komunitas wiki" secara default, karena kadang-kadang, saya salah :) @ddaa: Apa saja. Saya bertanya tentang RPC secara umum, jika mereka memiliki pro / kontra dalam konteks tertentu, silakan tambahkan ke daftar.
edomaur
Saya memiliki kebutuhan untuk melakukan RPC "nyata" beberapa waktu yang lalu (jenis RFC 1050) dan pilihannya tidak begitu mengesankan, jadi saya akhirnya harus melakukan sebagian besar dari itu sendiri. Jika ada yang punya alternatif bagus untuk itu, saya ingin mendengarnya.
Mattias Nilsson
Bagi mereka yang menginginkan Python-to-Python RPC - PyRo 4 versi terbaru tidak mendukung SSL, tetapi PyRo 3 masih melakukannya - keduanya semua-Python sehingga mereka mendukung Python 2, Python 3, PyPy, Jython, dan IronPython. RPyc memang mendukung SSL, sementara Circuits tidak menyebutkan ini.
RichVel

Jawaban:

38

XML-RPC adalah bagian dari pustaka standar Python:

marb
sumber
+1 ke XML-RPC untuk kemudahan, bahkan memperhitungkan bahwa SimpleXMLRPCServer tidak memiliki penanganan kesalahan yang tepat.
Denis Otkidach
1
"Peringatan Modul xmlrpc.server tidak aman terhadap data yang dibangun dengan berbahaya.", Jadi modul ini memiliki beberapa usecases yang sangat terbatas.
Equidamoid
1
@Equidamoid Jika Anda perlu mem-parsing data yang tidak dipercaya atau tidak terauthentikasi, lihat docs.python.org/2/library/xml.html#xml-vulnerabilities
AmaChefe
16

Apache Thrift adalah opsi RPC lintas-bahasa yang dikembangkan di Facebook. Berfungsi lebih dari soket, tanda tangan fungsi didefinisikan dalam file teks dengan cara yang bebas bahasa.

RemcoGerlich
sumber
Hemat tidak mendukung Python 3 belum didukung, itu memalukan
Roberto
Komentar pribadi: Hemat adalah mimpi buruk pemeliharaan. Saya belum melihat dua distribusi Linux bahkan menggunakan flag configure yang sebanding. Belum lama ini (ketika saya membangun 0.10.0 dari sumber), sebagian besar fitur perlu dinonaktifkan untuk membuatnya membangun sistem "eksotis" seperti Ubuntu, Debian atau Fedora saat ini. Perubahan Datatype di bawah kap membuat penggunaan C ++ berantakan #ifdef, dan dalam 12 tahun keberadaannya, mereka tidak berhasil meyakinkan diri bahwa perangkat lunak mereka siap untuk rilis 1.0.0. Saya suka sejumlah besar bahasa yang didukung, tetapi saya pikir itulah kelemahan mereka: mencoba melakukan terlalu banyak.
Marcus Müller
(Saya menggunakan penghematan dalam Proyek GNU berukuran sedang yang saya pertahankan. @Roberto, penghematan mendukung Py3, setidaknya sekarang.)
Marcus Müller
Saya benar-benar mendorong orang untuk benar-benar berpikir tentang apakah Anda benar - benar membutuhkan kerangka kerja lintas-bahasa yang benar-benar mencoba untuk menghubungkan PHP ke C ++ ke Java ke Python ke Erlang ke Common Lisp ke Haskell ke Swift. Ini adalah bahasa yang berbeda, karena suatu alasan, dan Thrift perlu melakukan kompromi untuk menemukan penyebut yang sama. Saya berpendapat bahwa sebagian besar orang benar-benar hanya perlu menghubungkan 1 atau 2 bahasa yang berbeda, dan kerangka kerja yang lebih ramping akan lebih disukai.
Marcus Müller
6

Sejak saya mengajukan pertanyaan ini, saya mulai menggunakan python-symmetric-jsonrpc . Ini cukup bagus, dapat digunakan antara perangkat lunak python dan non-python dan mengikuti standar JSON-RPC. Tetapi tidak memiliki beberapa contoh.

edomaur
sumber
5

Anda bisa mencoba Ladon. Ini melayani beberapa protokol server web sekaligus sehingga Anda dapat menawarkan lebih banyak fleksibilitas di sisi klien.

http://pypi.python.org/pypi/ladon

Jakob
sumber
2

Ada beberapa upaya untuk membuat SOAP bekerja dengan python, tapi saya belum mengujinya sehingga saya tidak bisa mengatakan apakah itu baik atau tidak.

SOAPy adalah salah satu contohnya.

Mattias Nilsson
sumber
2
Setelah menggunakan sebagian besar kerangka kerja SOAP dan menerapkannya sendiri untuk melakukan RPC berbasis refleksi, saran saya sederhana - jangan lakukan itu. Jika Anda tidak memerlukan komunikasi lintas bahasa + deskripsi antarmuka independen + pemetaan ke kelas khusus, kompleksitas SOAP hanya akan menjadi sakit kepala. Bahkan jika Anda perlu menggunakannya, Anda perlu pengalaman untuk mengetahui subset SOAP apa yang aman untuk digunakan.
Semut Aasma
3
SABUN adalah mimpi buruk secara umum dan terutama di Python. Jangan menggunakannya kecuali Anda dipaksa.
Denis Otkidach
4
Pengalaman terbatas saya dengan SOAP setuju dengan komentar lain di sini. xmlrpc sering melakukan semua yang saya butuhkan.
Mattias Nilsson
2

Kami sedang mengembangkan Versile Python (VPy), sebuah implementasi untuk python 2.6+ dan 3.x dari kerangka ORB / RPC baru. Rilis dev AGPL fungsional untuk tinjauan dan pengujian tersedia . VPy memiliki kemampuan python asli mirip dengan PyRo dan RPyC melalui lapisan objek asli umum ( contoh kode ). Produk ini dirancang untuk interaksi objek jarak jauh platform-independen untuk implementasi Platform Versile .

Pengungkapan penuh: Saya bekerja untuk perusahaan yang mengembangkan VPy.

Serbaguna
sumber
1

mungkin ZSI yang mengimplementasikan SOAP. Saya menggunakan generator rintisan dan Berhasil. Satu-satunya masalah yang saya temui adalah tentang melakukan SOAP melalui HTTPS.

Phil
sumber
0

Anda melewatkan omniORB . Ini adalah implementasi CORBA yang cukup lengkap, sehingga Anda juga dapat menggunakannya untuk berbicara dengan bahasa lain yang memiliki dukungan CORBA.

Dave Kirby
sumber