Multi Proses dengan Python

Berawal dari server yang bengong karena proses for-loop yang berkepanjangan, saatnya untuk eksplorasi multi proses di Python. Artinya saat looping, proses akan dikerjakan oleh ‘worker’, sehingga loop bisa berlanjut ke baris berikutnya. Cocok untuk pemrosesan data per baris, seperti query lalu update satu-satu dengan proses panjang, atau proses unggah berkas per baris untuk satu persatu dimasukkan dalam database.

Ada beberapa alternatif:

  1. Thread + Queue
    Ini standar bawaan Python. Langsung bisa pakai dengan kinerja yang mengagumkan. Kelemahannya adalah saat mengerjakan sesuatu tidak bisa ambil nilai kembalian hasil kerjaan tersebut (return value), kecuali lewat sub-classing dengan mengubah perilaku kelas utama dari Thread.
  2. PythonRQ + Redis
    Antriannya banyak pilihan dan bisa ambil nilai kembalian setelah menerapkan delay (1 detik). PythonRQ menerapkan fork untuk workernya (bukan thread), sehingga setiap proses berdiri sendiri. Tergantung sama Redis untuk menyimpan data antriannya. Cocok untuk distribusi kerjaan, tapi untuk kecepatan, kurang.
  3. ThreadPool
    Merupakan sub modul dari modul multiprocessing. Lebih cepat dari PythonRQ namun lebih lambat dari native Thread+Queue. Kelebihannya adalah bisa ambil nilai kembalian dengan mudah tanpa harus sub-classing.

Kode

Berikut contoh kode yang saya buat untuk pengujian:

import os
import sys, time
from Queue import Queue

from threading import Thread
from rq import Queue as rqueue
from redis import Redis

q = Queue()
threads = 10
numrange = 1000

# fungsi yang akan dijalankan
def deltrans(i):
    return "hello %s"%(i)

#THREAD + QUEUE
start = time.time()

def dothing(q):
    while True:
        res = q.get()
        q.task_done
    return res

for y in range(threads):
    worker = Thread(target=dothing, args =(q,))
    worker.setDaemon(True)
    worker.start()

for i in range(numrange):
    q.put(deltrans(i))
qtime = time.time()-start

#PythonRQ
astart = time.time()
conn = Redis()

rq = rqueue(connection = conn)

from hworld import helloworld

for i in range(numrange):
    hw = rq.enqueue(helloworld,i)
    print hw.result

# ThreadPool
btime = time.time()-astart
from multiprocessing.pool import ThreadPool

pool = ThreadPool(processes=threads)
astart = time.time()

for i in range(numrange):
    async_result = pool.apply_async(deltrans, (i,)) 
    print async_result.get()

ctime = time.time()-astart

print "%s %s %s"%(qtime,btime,ctime)

Tambahan berkas hworld.py untuk PythonRQ:

def helloworld(i):
    return "hello %s"%(i)

Hasil

  1. Thread+ Queue: 0.0666551589966 (tanpa kembalian)
  2. PythonRQ: 0.510520935059 (tanpa kembalian, karena harus tunggu 1 detik untuk ambil kembalian)
  3. ThreadPool: 0.222325086594 (dengan kembalian)

Pendapat pribadi, jika tidak ingin kembalian, gunakan Thread+Queue. Jika ingin kembalian, gunakan ThreadPool. Jika ingin banyak manipulasi kembalian, gunakan PythonRQ.

Kebenaran

Anda bisa dikatakan sudah memiliki keyakinan yang benar, ditandai dengan dua hal. Pertama, hidup Anda bermanfaat untuk orang lain. Akhlak Anda baik. Anda mengayomi seluruh alam. Bukan mengayomi satu golongan. Bukan mengayomi manusia. Tapi seluruh alam. Itu dari sisi sosial. Kedua, dari sisi Anda sendiri. Anda menemukan kedamaian. Meskipun tidak semua pertanyaan terjawab, tapi dari apa yang Anda lakukan setiap hari, Anda temukan kedamaian. Kedamaian yang muncul dari dalam diri sendiri. Bukan tergantung barang. Bukan tergantung keadaan.

Tembok Ratapan

Ruangan ini akan kamu buka kembali saat ada kegelisahan. Namanya orang gelisah tentu tidak tahu sebabnya. Yang paling rasional adalah adanya ketidaksesuaian antara kondisi sekarang dengan apa yang diinginkan oleh hati. Masalahnya, kamu tidak pernah tahu apa yang benar-benar diinginkan oleh hatimu.

Satu hal yang kamu tahu, kembali kepada Allah adalah pilihan yang tidak pernah mengecewakan. Selalu menentramkan. Kadang diberi jalan keluar. Kadang dijawab. Kadang ditahan agar kita berlama-lama kontemplasi mengingatnya.
Kadang hati ini diberikan kesempitan. Kadang keluasan. Meskipun itu masalah perspektif, tapi cara pandang itu muncul tanpa kita pernah mengontrolnya secara proporsional. Ikuti saja. Toh Dia selalu memiliki rencana rahasia yang kamu tak pernah tahu. Latihlah hatimu untuk selalu berprasangka baik terhadap-Nya. Bayangkanlah seolah-olah Dia sedang menyapa-Mu dengan kasih sayang dan senyuman lewat masalah, kesempitan atau kegelisahan yang Kamu hadapi.

Hadir

Kamu tidak akan pernah bisa menghadirkan-Nya jika hatimu dipenuhi dengan dunia. Tapi, bagaimana cara berpaling dari dunia? Sebab setiap hari kamu mencecapnya lewat seluruh indramu? Tentu saja kamu tidak mau hidup dengan pandangan yang kosong. Hiduplah dengan penuh emosi, meluap-luap, namun jauhkan pandanganmu dari apa yang ada di depanmu. Pandanganmu adalah akhirat. Tempat kembalimu yang baik.

Bagaimana Konsisten Terhadap Tujuan Sulit?

so-much-cocaineKita hidup hampir sebagian besar digerakkan oleh alam bawah sadar. Karena sudah terlalu sering melakukannya, otak secara otomatis akan membangun kemampuan untuk dapat menjalankan satu aktivitas tanpa proses berfikir. Ini menjadi kebiasaan yang membentuk diri kita saat ini. Lalu, bisakah kita hentikan kebiasaan buruk atau membuat kebiasaan baru untuk hal-hal yang sudah mendarah daging? Bisa. Begini caranya. Continue reading Bagaimana Konsisten Terhadap Tujuan Sulit?

Komponen Strategi

komponen strategiApa strategi Anda? Ingin menaikkan penjualan sehingga perusahaan bisa bertumbuh? Itu adalah sasaran, bukan strategi. Seringkali orang keliru dalam menjelaskan konteks strategi, dengan sasaran atau ambisi. Strategi bisa dikenali karena memiliki beberapa komponen. Menurut Richard P. Rumelt, komponen tersebut adalah adanya diagnosa awal, kebijakan pembimbing, dan tindakan yang koheren. Continue reading Komponen Strategi

Strategi

Strategi - image by tim MaherDari sekian banyak pilihan yang ada dihadapannya, mana yang harus diambil? Setiap detik, ia selalu dihadapkan pada pilihan-pilihan. Ke kiri? Ke kanan? Jalan terus? Bertahan terhadap profesi sekarang? Pindah kerja? Lewat mana ke kantor hari ini? Seringkali keputusan diambil tanpa sadar. Otomatis ke kantor lewat jalan yang itu. Setiap akhir pekan juga melakukan kegiatan yang itu. Semua serba bawah sadar. Setiap jam. Setiap hari. Setiap minggu. Setiap tahun. Kadang ia merasa waktu berlalu begitu cepat. Continue reading Strategi

Sesak

SesakJika kamu terbebani dengan kesulitan-kesulitan yang ada di depan, maka kamu tidak bisa bergerak. Apa yang harus kamu lihat? Kamu sedang menilai diri sendiri. Kamu sedang berdialog dengan Tuhan. Apa rencana-Nya? Kenapa dadamu terasa sempit?

Kesempitan itu muncul saat kamu menginginkan sesuatu, yang lebih besar dari kemampuan kamu. Apakah kamu harus melepaskan keinginan tersebut? Lalu hidup dalam kondisi saat ini? Jika demikian apakah bukan berarti kamu sudah menyerah? Ada semacam paradoks antara ‘bersyukur terhadap apa yang dimiliki’ dengan ‘mencoba meraih yang lebih besar, untuk tahu berapa jauh batasmu’. Continue reading Sesak

Kecerdasan Buatan – Pekerjaan Anda akan digantikan Robot

kecerdasan-buatanSaat membicarakan Kecerdasan Buatan, pertanyaan paling sering muncul adalah, pekerjaan apa saja yang akan digantikan oleh robot. Ciri pekerjaan ini adalah dilakukan berulang-ulang, dengan ritme dan parameter yang bisa ditebak. Mungkin yang Anda pikirkan adalah pekerjaan klerikal (administrasi), keuangan, pekerjaan kebersihan dan sejenisnya. Namun riset yang dilakukan oleh McKinsey & Company menunjukkan lain.

Continue reading Kecerdasan Buatan – Pekerjaan Anda akan digantikan Robot

Fokus

Waktu adalah sumber daya yang paling langka, dan tidak bisa dikomoditikan. Anda tidak bisa mereplikasi waktu. Mungkin bisa melipatnya. Namun waktu dari dulu hingga sekarang, setiap dari kita dijatah sama setiap hari, meskipun total akhirnya bisa berbeda. Demi waktu, Anda harus mengerjakan sesuatu yang benar-benar penting. Sibuk bukan berarti Anda menghabiskan waktu lebih bernilai. Sebab kesibukan berbeda dengan produktivitas.

Fokus adalah salah satu titik yang paling penting, dalam bertanding melawan waktu. Sekarang jaman milenial. Mengerjakan beberapa hal bersamaan sudah biasa. Apalagi kita dikelilingi oleh teknologi yang pada dasarnya adalah sumber distraksi. Informasi berserakan di mana-mana sehingga harus bisa memilah. Pemenangnya bukanlah pe
nguasa informasi, tapi yang mampu memilah informasi sehingga mendukung apa yang menjadi fokus bagi dirinya.

FokusUntuk bisa fokus Anda harus menetapkan tujuan. Sebab antara titik Anda dan titik tujuan Anda, ada satu garis lurus yang menyambungkannya, dan disitulah fokus membentang. Hanya di garis itu. Sebab fokus pada hal yang tidak membawa Anda ke tujuan juga merupakan hal sia-sia. Jadi apa fokus Anda hari ini?