Python
Halaman SebelumnyaHalaman Berikutnya
Menjalankan beberapa utas mirip dengan menjalankan beberapa program berbeda secara bersamaan, tetapi dengan manfaat berikut
Beberapa utas dalam suatu proses berbagi ruang data yang sama dengan utas utama dan oleh karena itu dapat berbagi informasi atau berkomunikasi satu sama lain dengan lebih mudah daripada jika mereka adalah proses yang terpisah.
Utas terkadang disebut proses ringan dan tidak memerlukan banyak memori di atas kepala; mereka lebih murah daripada proses.
Sebuah thread memiliki awal, urutan eksekusi, dan kesimpulan. Ini memiliki pointer instruksi yang melacak di mana dalam konteksnya saat ini sedang berjalan.
Itu dapat didahului (diinterupsi)
Ini dapat ditunda sementara (juga dikenal sebagai tidur) saat utas lainnya sedang berjalan - ini disebut menghasilkan.
Untuk menelurkan utas lain, Anda perlu memanggil metode berikut yang tersedia di utas modul
thread.start_new_thread ( function, args[, kwargs] )
Panggilan metode ini memungkinkan cara yang cepat dan efisien untuk membuat utas baru di Linux dan Windows.
Pemanggilan metode segera kembali dan utas anak dimulai dan memanggil fungsi dengan daftar args . yang diteruskan . Saat fungsi kembali, utas berakhir.
Di sini, args adalah tupel argumen; gunakan Tuple kosong untuk memanggil fungsi tanpa memberikan argumen apa pun. kwargs adalah kamus opsional argumen kata kunci.
#!/usr/bin/python import thread import time # Define a function for the thread def print_time( threadName, delay): count = 0 while count < 5: time.sleep(delay) count += 1 print "%s: %s" % ( threadName, time.ctime(time.time()) ) # Create two threads as follows try: thread.start_new_thread( print_time, ("Thread-1", 2, ) ) thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print "Error: unable to start thread" while 1: pass
Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut
Thread-1: Thu Jan 22 15:42:17 2009 Thread-1: Thu Jan 22 15:42:19 2009 Thread-2: Thu Jan 22 15:42:19 2009 Thread-1: Thu Jan 22 15:42:21 2009 Thread-2: Thu Jan 22 15:42:23 2009 Thread-1: Thu Jan 22 15:42:23 2009 Thread-1: Thu Jan 22 15:42:25 2009 Thread-2: Thu Jan 22 15:42:27 2009 Thread-2: Thu Jan 22 15:42:31 2009 Thread-2: Thu Jan 22 15:42:35 2009
Meskipun sangat efektif untuk threading tingkat rendah, tetapi utas modul sangat terbatas dibandingkan dengan modul threading yang lebih baru.
Modul threading baru yang disertakan dengan Python 2.4 memberikan dukungan tingkat tinggi yang jauh lebih kuat untuk thread daripada modul thread yang dibahas di bagian sebelumnya.
mengutas modul memperlihatkan semua metode utas modul dan menyediakan beberapa metode tambahan
threading.activeCount() Mengembalikan jumlah objek thread yang aktif.
threading.currentThread() Mengembalikan jumlah objek utas dalam kontrol utas pemanggil.
threading.enumerate() Mengembalikan daftar semua objek utas yang sedang aktif.
Selain metode, modul threading memiliki Utas kelas yang mengimplementasikan threading. Metode yang disediakan oleh Utas kelas adalah sebagai berikut
lari() Metode run() adalah titik masuk untuk sebuah thread.
mulai() Metode start() memulai thread dengan memanggil metode run.
bergabung([waktu]) Join() menunggu thread berakhir.
isAlive() Metode isAlive() memeriksa apakah sebuah thread masih dieksekusi.
getName() Metode getName() mengembalikan nama thread.
setName() Metode setName() menetapkan nama thread.
Untuk mengimplementasikan thread baru menggunakan modul threading, Anda harus melakukan hal berikut −
Tentukan subkelas baru dari Utas kelas.
Ganti __init__(self [,args]) metode untuk menambahkan argumen tambahan.
Kemudian, ganti metode run(self [,args]) untuk mengimplementasikan apa yang harus dilakukan utas saat dimulai.
Setelah Anda membuat Utas . baru subkelas, Anda dapat membuat turunannya dan kemudian memulai utas baru dengan menjalankan start() , yang pada gilirannya memanggil run() metode.
#!/usr/bin/python import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name print_time(self.name, 5, self.counter) print "Exiting " + self.name def print_time(threadName, counter, delay): while counter: if exitFlag: threadName.exit() time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() print "Exiting Main Thread"
Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut
Starting Thread-1 Starting Thread-2 Exiting Main Thread Thread-1: Thu Mar 21 09:10:03 2013 Thread-1: Thu Mar 21 09:10:04 2013 Thread-2: Thu Mar 21 09:10:04 2013 Thread-1: Thu Mar 21 09:10:05 2013 Thread-1: Thu Mar 21 09:10:06 2013 Thread-2: Thu Mar 21 09:10:06 2013 Thread-1: Thu Mar 21 09:10:07 2013 Exiting Thread-1 Thread-2: Thu Mar 21 09:10:08 2013 Thread-2: Thu Mar 21 09:10:10 2013 Thread-2: Thu Mar 21 09:10:12 2013 Exiting Thread-2
Modul threading yang disediakan dengan Python mencakup mekanisme penguncian sederhana yang memungkinkan Anda untuk menyinkronkan utas. Kunci baru dibuat dengan memanggil Lock() metode, yang mengembalikan kunci baru.
memperoleh(memblokir) metode objek kunci baru digunakan untuk memaksa utas berjalan secara sinkron. pemblokiran opsional parameter memungkinkan Anda untuk mengontrol apakah utas menunggu untuk mendapatkan kunci.
Jika memblokir diatur ke 0, utas segera kembali dengan nilai 0 jika kunci tidak dapat diperoleh dan dengan 1 jika kunci diperoleh. Jika pemblokiran disetel ke 1, utas akan memblokir dan menunggu kunci dilepaskan.
rilis() metode objek kunci baru digunakan untuk melepaskan kunci saat tidak lagi diperlukan.
#!/usr/bin/python import threading import time class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name # Get lock to synchronize threads threadLock.acquire() print_time(self.name, self.counter, 3) # Free lock to release next thread threadLock.release() def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 threadLock = threading.Lock() threads = [] # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() # Add threads to thread list threads.append(thread1) threads.append(thread2) # Wait for all threads to complete for t in threads: t.join() print "Exiting Main Thread"
Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut
Starting Thread-1 Starting Thread-2 Thread-1: Thu Mar 21 09:11:28 2013 Thread-1: Thu Mar 21 09:11:29 2013 Thread-1: Thu Mar 21 09:11:30 2013 Thread-2: Thu Mar 21 09:11:32 2013 Thread-2: Thu Mar 21 09:11:34 2013 Thread-2: Thu Mar 21 09:11:36 2013 Exiting Main Thread
Antrian module memungkinkan Anda membuat objek antrian baru yang dapat menampung sejumlah item tertentu. Ada metode berikut untuk mengontrol Antrian
dapatkan() Get() menghapus dan mengembalikan item dari antrian.
menempatkan() Put menambahkan item ke antrian.
qsize() qsize() mengembalikan jumlah item yang sedang dalam antrian.
kosong() The empty() mengembalikan True jika antrian kosong; jika tidak, Salah.
penuh() full() mengembalikan True jika antrian penuh; jika tidak, Salah.
#!/usr/bin/python import Queue import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, q): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.q = q def run(self): print "Starting " + self.name process_data(self.name, self.q) print "Exiting " + self.name def process_data(threadName, q): while not exitFlag: queueLock.acquire() if not workQueue.empty(): data = q.get() queueLock.release() print "%s processing %s" % (threadName, data) else: queueLock.release() time.sleep(1) threadList = ["Thread-1", "Thread-2", "Thread-3"] nameList = ["One", "Two", "Three", "Four", "Five"] queueLock = threading.Lock() workQueue = Queue.Queue(10) threads = [] threadID = 1 # Create new threads for tName in threadList: thread = myThread(threadID, tName, workQueue) thread.start() threads.append(thread) threadID += 1 # Fill the queue queueLock.acquire() for word in nameList: workQueue.put(word) queueLock.release() # Wait for queue to empty while not workQueue.empty(): pass # Notify threads it's time to exit exitFlag = 1 # Wait for all threads to complete for t in threads: t.join() print "Exiting Main Thread"
Ketika kode di atas dijalankan, menghasilkan hasil sebagai berikut
Starting Thread-1 Starting Thread-2 Starting Thread-3 Thread-1 processing One Thread-2 processing Two Thread-3 processing Three Thread-1 processing Four Thread-2 processing Five Exiting Thread-3 Exiting Thread-1 Exiting Thread-2 Exiting Main Thread
Python
Siklus threading G92 digunakan untuk threading pada mesin bubut cnc. Manfaat tambahan dari siklus ulir G92 adalah G-code G92 memberikan kontrol penuh kepada masinis cnc atas kedalaman setiap pemotongan saat threading. Untuk deskripsi lengkap tentang siklus threading G92 baca Siklus Threading CNC Fa
G-code G76 adalah siklus cnc yang digunakan untuk memotong benang pada mesin cnc. Siklus threading G76 dijelaskan di sini G76 Thread Cycle . Pemotongan benang lancip dengan G76 siklus thread dijelaskan di sini G76 Tapered Threading Untuk Pemotongan thread multi-mulai dengan G76 lihat G76 Multi-St
Fanuc diragukan lagi adalah kontrol cnc yang paling banyak digunakan dan dipahami.Fanuc digunakan pada berbagai mesin seperti mill, bubut dll. Fanuc 21 TB Jadi kadang-kadang ketika berurusan dengan kode-G hal-hal menarik terjadi seperti Grup kode Fanuc G (atau Jenis Grup kode Fanuc G) A, B, C.Sep
Siklus penguliran Haas G76 dapat digunakan untuk, utas eksternal, utas internal, utas lurus, utas lancip. Dengan siklus threading Haas G76, programmer dapat dengan mudah memerintahkan beberapa lintasan pemotongan di sepanjang thread. Sifat beban dan keausan pahat dapat dikontrol dengan menggunakan