<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=PythonThreadProgramming</id>
	<title>PythonThreadProgramming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=PythonThreadProgramming"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=PythonThreadProgramming&amp;action=history"/>
	<updated>2026-05-15T14:08:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=PythonThreadProgramming&amp;diff=38047&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:24, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=PythonThreadProgramming&amp;diff=38047&amp;oldid=prev"/>
		<updated>2021-02-07T05:24:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
= 참고 사이트 =&lt;br /&gt;
* [http://linuxgazette.net/107/pai.html]&lt;br /&gt;
&lt;br /&gt;
= 기본 =&lt;br /&gt;
* 아래는 간단하게 쓰레드 하나를 생성하는 예제&lt;br /&gt;
 import time&lt;br /&gt;
 import thread&lt;br /&gt;
 &lt;br /&gt;
 def myfunction(string,sleeptime,*args):&lt;br /&gt;
     while 1:&lt;br /&gt;
        &lt;br /&gt;
         print string&lt;br /&gt;
         time.sleep(sleeptime) #sleep for a specified amount of time.&lt;br /&gt;
 &lt;br /&gt;
 if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
     thread.start_new_thread(myfunction,(&amp;quot;Thread No:1&amp;quot;,2))&lt;br /&gt;
 &lt;br /&gt;
     while 1:pass&lt;br /&gt;
== Lock ==&lt;br /&gt;
* lock이 왜 필요하나? -&amp;gt; 하나의 공용 자원을 여러 스레드가 동시에 사용하면 문제가 생길수 있다.  그래서 공용자원을 사용할때는 락을 걸고 사용하고 사용하고 나서는 락을 푼다. &lt;br /&gt;
** 문제 상황 예 : count 변수를 각 쓰레드들이 1식 증가를 시키는데 한 스레드가 증가 시키는 동안 다른 스레드도 동시에 증가 시키다 보면 원래 2 증가 해야하는데 1증가 하는 수가 생긴다..&lt;br /&gt;
 import time&lt;br /&gt;
 import thread&lt;br /&gt;
 &lt;br /&gt;
 def myfunction(string,sleeptime,lock,*args):&lt;br /&gt;
     while 1:&lt;br /&gt;
 	#entering critical section&lt;br /&gt;
         lock.acquire() &lt;br /&gt;
         print string,&amp;quot; Now Sleeping after Lock acquired for &amp;quot;,sleeptime&lt;br /&gt;
         time.sleep(sleeptime) &lt;br /&gt;
         print string,&amp;quot; Now releasing lock and then sleeping again&amp;quot;&lt;br /&gt;
         lock.release()&lt;br /&gt;
 	#exiting critical section&lt;br /&gt;
         time.sleep(sleeptime) # why?&lt;br /&gt;
 &lt;br /&gt;
 if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
     lock=thread.allocate_lock()&lt;br /&gt;
     thread.start_new_thread(myfunction,(&amp;quot;Thread No:1&amp;quot;,2,lock))&lt;br /&gt;
     thread.start_new_thread(myfunction,(&amp;quot;Thread No:2&amp;quot;,2,lock))&lt;br /&gt;
 &lt;br /&gt;
     while 1:pass&lt;br /&gt;
** 위 소스에서 why 부분,, 왜 sleep을 넣었을까?(만약 저것을 빼면 한쓰레드가 자원을 독점하게 된다) -&amp;gt; Python 은 threadsafe 하지 않다.  Python에서는 자바처럼 스레드가 문법의 중요한 위치를 차지하고 있지 않다.  그것보다 이식 가능성을 더 중요하게 생각한다.  &lt;br /&gt;
** 모든 built-in 함수가 다른 쓰레드가 실행할수 있도록 I/O에 대한 block waiting 을 하는 것은 아니다.(time.sleep(), file.read(), select.select()) 은 예상대로 작동한다)&lt;br /&gt;
** lock 상태에 있는 acquire() 함수에 대하여 interrupt 하는것은 가능하지 않다. (키보드 인터럽트도 lock을 얻고 나서야 일어난다.)&lt;br /&gt;
** 그래서 아래와 같은 소스는 starvation을 일으킨다.&lt;br /&gt;
 hile 1:&lt;br /&gt;
 	lock.acquire()&lt;br /&gt;
 	.....&lt;br /&gt;
 	#some operation&lt;br /&gt;
 	.....&lt;br /&gt;
 	lock.release()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Python]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>