요즘 고수님의 말씀이 뜸하시기도 하고, 이래저래 이쪽저쪽 퇴근 후 바쁘다보니 포스팅이 늦어지네요.



9월 13일

보락, 화일 약품등 - 미국의 중국인 비자 취소에 중미 의약품 수출 중단 검토

에어 부산 - 분리매각 기대감

에이텍 - 이재명 차기 대선 주자 지지율 1위 소식

아이즈비전, 머큐리 - 공공와이파이 추진 본격화

두산 중공업 - 대통령 방문 예정 소식

금일은 특별한 뉴스가 많이 없었네요. 제 기준으로는 좋은 뉴스가 없을 때는 쉬는 것도 좋은 습관 중 하나입니다. 생각없이 이거저거 건드려봐야 손실만 늘어나니 항상 중심을 잡고 손가락 단속을 잘 하시기 바랍니다. 그리고 꼭 지켜야 하는 습관이나 원칙이 있다면 눈에 잘 보이는 곳에 메모해 두는 것이 좋습니다. 




9월 13일 오후


지난 달 적었던 내용이긴 하지만 중요한 부분이고 이해를 보다 쉽게 하기 위해 지인의 예를 들어 설명드리고자 합니다.


우선 현재 상황을 보면 보유 종목이 무지하게 많습니다. 단타치려고 들어갔다가 물려서 본전 생각에 그냥 두었던 게 하나 둘 늘어가다보니 이런 상황이 생긴 것인데 종목수가 많아지면 리스크 관리가 상당히 힘들어 집니다. 밑빠진 독에 물붓기란 말과 같이 관리가 안되는 종목들 방관한 채 새 종목들을 백날 단타치고 수익 내봐야 소용없다는 뜻입니다. 다들 한번 쯤 폭락 맞아봐서 아시겠지만 지수가 한번 폭락 나오면 죽는 겁니다. 그렇기 때문에 자신의 능력에 따라 종목수를 늘려감이 좋은데 처음에는 2~3종목이 딱 좋은 것 같아요.


둘째 단타나 스윙할 때 스마트폰은 비추입니다. 자신의 보유 종목 시황은 물론 차트 호가창을 보면서 주문을 넣고 빼야 하는데 스마트폰 하나로 이 모든 것을 다 본다는 것은 사실 불가능하고 오로지 촉에 의존해서 해야하므로 옳은 방법은 아닙니다. 거기엔 자기들만의 방 같은 곳에 들어가서 정보도 봐야할 것인데 스마트폰 하나로는 부족합니다. 정보 수집과 차트, 호가창, 지수 흐름, 외인, 기관 동향등을 보려면 모니터 하나로는 부족하고 최소 2~3개로 모니터링해야지만 그나마 필요한 것을 볼 수 있습니다. 


셋째 주식은 감으로 하는게 아닙니다. 우리가 쇼핑을 할 때 제품 상세 설명은 물론 인터넷 후기까지 꼼꼼히 확인 후 구매를 하는데 주식은 목돈을 굴리는데 어떻게 그렇게 쉽게 무턱대고 사고 팔고 할 수 있는지 다시 한번 생각해 보시기 바랍니다. 각 종목마다 명분을 가지고 움직이기 때문에 종목의 특성을 반드시 파악 후 매매를 하는게 좋습니다.


넷째 크게 시세난 종목에 대해 미련을 갖지 말자. 지인의 매매 특성을 보면 꼭대기에서 하한가 근처까지 또는 장대음봉이나온 경우 싸다고 말합니다. 신풍제약이나 신일제약이 아주 좋은 예가 될 것 같은데 지금 시점은 아주 밑에서 잡은 분들의 영역이지 신규로 진입해서 물렸다가 본전을 기다려서는 안되는 위치입니다. 이런 종목에서 장대음봉 출현시 싸다고 하는 것은 정말 무모하고 손실을 극대화하기 위한 투자로 밖에는... 도박으로 봐도 무방합니다. 개인적으로는 저렴하다고 생각하는 위치는 일봉 차트상 쌍바닥 또는 20일선 기준 10 ~ 20% 이상 안 오른 것을 기준으로 봅니다.


다섯번째 초보자나 수익이 들쑥날쑥 하는 분들은 소액이 좋습니다. 큰 수익을 바라는 마음은 알겠으나 준비가 되지 않은 이에게는 쉽게 자리를 내주지 않는 곳이 이 곳의 생리입니다. 자기 시간을 들여 노동을 한 댓가로 모은 수입을 허무하게 날리고 싶지 않다면 소액으로 충분한 검증과 공부, 노력이 필요합니다. 꾸준한 수익이 이루어진다면 바로 그 때부터 비중을 조금씩 늘려가시기 바랍니다. 현재 저는 5백 정도를 기본으로 하고 있고 상황에 따라 비중을 조절합니다만 꾸준한 수익에 따라 비중을 점점 늘릴 계획입니다. 이 내용은 처음부터 강조한 부분이고 100~500 사이를 추천합니다. 주식을 통해 경제적 자유를 누릴 수 있다는 희망을 갖고 계시다면 공부할 것, 지켜야 할 것, 해야할 것, 하지말아야 할 것등 자유를 위한 스스로의 억압이 필요합니다.


마지막으로 위의 내용을 이해만하고 실천을 하지 않는 것은 가장 큰 문제입니다. 백번 천번 강조해도 스스로가 바뀌지 않으면 결과 역시 바뀌지 않습니다. 어제와 같은 오늘을 살면서 어제와 다른 오늘을 기대할 수 없습니다. 주식은 욕심을 버리고 아주 기초적이고 기본적인 것에서 바른 습관만 가지고 시장에 임한다면 손실을 최소화 시킬 수 있고 꾸준한 수익을 이뤄낼 수 있습니다. 한번의 매매를 하더라도 교훈이나 배움을 얻고자 하는 자세로 임한다면 시간이 흐를수록 자신이 조금씩 변화됨을 느끼실 수 있을 것입니다. 뉴스를 주식과 연계하여 해석하는 능력도 마찬가지입니다. 


당장의 수익이 다른 무엇보다 중요하다고 생각하실 수 있지만 그러한 조급함이 오히려 독이 되어 돌아옵니다. 인내심을 가지고 하나씩 점진적인 성취를 이루어 내시길 바라겠습니다.만렙이 10이라면 저는 이제 3렙 정도나 될까요? 많이 부족하고 개선해야할 부분도 상당하므로 좋은 것들은 계속 배우고 내 것으로 만들어갈 계획입니다. 적을 내용이 많지만 오늘은 이 정도로 마무리 지을게요.



아울러 요즘 신용 위기, 거품등 시절이 너무 수상해서 거시경제의 무명 논객의 글도 같이 적어봅니다.



<다음 카페, 어느 논객의 글중에서>

현 상황은 경제담론, 아전인수로 끼워 맞춰 말을 만듭니다. 

뉴노멀, 새로운 균형 이것은 그냥 우기는 거에요. 말도 안되지만 새로운 규칙이고 앞으로 이렇게 유지될거라는 헛소리입니다. 여러가지 요인이 있지만 채권 얘기 하시는 분이 여기에는 없더라구요. 자본 비중의 70% 가량 되는 채권시장은 무엇보다 중요한 항목이니 주시해야 합니다. 금리가 우하향해야 유지가 가능한 것인데 이것은 불가능합니다. 채권 수익률은 표면금리 대비 시장금리로 계산됩니다. 표면 금리가 0%라고 가정하고 시장 금리가 0%에서 높아지면 손해가 발생하고 시장금리가 0%에서 낮아지면 이득이 발생하죠. 시장금리가 1%라면 표면금리가 0%인 채권을 가지고 있으면 손해, 시장금리가 -1%라면 0% 표면금리의 채권은 이득이 발생하죠. 쿠폰금리가 시장금리보다 높아야 이득이고 낮으면 손해입니다.

신용통화 시스템에 대해 여러 번 말씀드려서 구조적 이해는 차치하고 금리는 우하향하는데 경제 싸이클에 따라 등락을 반복하죠. 경기가 좋아 브레이크를 걸어야 할 때는 금리가 올라 채권시장이 좋지 않고, 경기가 나쁠 때는 금리가 내려 채권 시장이 좋아집니다. 일반적으로 경제싸이클에 따라 이러한 균형이 유지되며 나아가야 하는데 지금은 이게 깨져버렸죠. 금리가 우하향하며 채권금리가 이미 바닥을 찍었고 시장금리도 오르지 않게 ycc 얘기까지 나오며 통제되고 있습니다. 채권 평가는 지금이 높고 앞으로는 무조건 하락합니다. 왜냐하면 금리를 올릴 수 없기 때문에, 즉 금리가 오르면 채권의 수익률이 떨어지지만 올려야 내릴 수도 있는 겁니다. 정상적인 상황에서 금리를 올릴 수 없다는 이야기이고 자본이 채권에 머무를 이유가 없다는 것입니다. 금리가 오르면 무너지는데 올리지 못하면 다른 곳이 터지는 구조적 한계를 시인하는 외통수입니다. 앞으로 중앙은행은 금리를 올리지 못하고 채권금리가 오르지 못하게 캡을 씌울 것입니다. 하지만 결국 인플레이션이 발생하고 시장금리가 뛸 것이고 이러면 채권시장이 무너지며 신용충격이 와서 금융 시스템이 무너집니다. 가장 비중이 큰 자본인 채권의 평가액이 하락할 때 야기되는 신용 충격을 우리는 인지하고 있어야 합니다. 이미 마이너스금리 채권이 있고 이것만 터져도 아마겟돈입니다.



한동안 글이 뜸했던 관계로 한꺼번에 올립니다. 또 마땅히 올릴만한 의미심장한 글도 없었던 관계로 밀린 일기 쓰 듯 올립니다.


8월 27일 목요일

비덴트 - 빗썸 재매각 추진 소식

태평양 물산, 넥스트 BT, 국동, 서울리거 - 방호복

CJ씨푸드1우, 우양, 서울 식품등 - 외출 삼가로 인한 1인 간편식

대림 제지, 태림 포장, 대양 제지, 영풍 제지 - 물류주, 시외 강세, 택배 포장지 수급 확대 기대

인프라웨어 - 재택 근무 솔루션

뉴스 매매는 비덴트 밖에 없네요. 나머지는 모두 코로나 확산으로 인한 관련주들입니다. 내일도 300여명 이상 이미 확진이라는데 관련 테마 추가 순환매가 예상됩니다. 단타가 어려운 장입니다. 나랑 잘 맞는 장은 반드시 돌아오니 손실없이 잘 버티시기 바래요.


8월 31일 월요일

YG플러스 - 양현석 지분 매입

브이티지엠피 - 브이티바이오 알츠하이머 임상 승인, 큐브엔터와 알리바바 계약

세미콘라이트, 오성첨단소재 - 미국 마리화나 다음달 전국 합법화 표결

정다운 - 코로나로 인한 외출 자재, 1인 간편식외 수산주, 닭고기등 먹거리 강세

한네트, 푸른기술 - 한국 은행 디지털 화폐 이슈


9월 1일 화요일

한국 최초로 빌보드 싱글 차트 1위인데 장시작하자마자 흘러내려 아쉽네요. 오늘 교훈은 소문에 사서 뉴스에 팔아라네요.

금요일부터 어제 신규까지 오버나잇한 것들 모두가 방탄주였습니다.

시간외에는 에이프로젠 합병 날짜 확정되어 관련주들이 움직였네요.

=> 에이프로젠 합병 관련 대공지문 확인 바랍니다. 대충 요약하면 10일내 금감원에서 승인 안해주면 자사가 할 만큼했고 철회한다는 내용입니다. 주가에 영향이 있을 것 같은데 어떻게 될지 지켜보시죠.


9월 8일 화요일

곧 미국 장 시작인데 시퍼렇네요. 금일은 종근당 그룹과 에스씨엠생명과학 그리고 키오스크 관련주를 매매하려고 계획했었는데 반쪽짜리 실천만 했네요. 종목을 찾는 시야가 조금씩 좋아지는 것 같긴 한데. 아직 자신감이 부족한 것인지 너무 신중한 것인지 막상 매매하려고 하면 많이 망설여집니다. 한번에 다 바뀔 수는 없을 것 같고 조금씩 천천히 고쳐야겠습니다. 


9월 9일 수요일

뉴스를 많이 보시고 공부를 해서 이 시장을 이겨내는 방법을 찾으시라는 것이 요점입니다. 자신의 방식만 고집할 필요는 없습니다. 수익을 만들어 내는 수많은 방법이 있고 저도 저만의 방법을 찾았을 뿐입니다. 무엇보다 수익이 당장은 중요하겠지만 길게 보세요. 한번을 매매해도 내가 무엇을 잘못해서 손실이 났는지 파악하시고 꼭 고쳐나가야 돼요.

누군가에게 의지하기보다 공부 열심히 해서 성투하는 투자자가 되시기 바랍니다. 밤 늦게 주제넘는 글 적어 죄송하고 모두 좋은 꿈 꾸세요.


"프로그래밍 언어의 개념과 흐름에 대한 고찰 - 파이썬답게 코딩하기" 학습중...


비동기 기법에 대해 알아보는데 처음 보는 생소한 개념이라 이해하는데 어려움이 좀 있네요.



## Python 3.2버젼 비동기 논블록 구현시 콜백 함수 사용. 예외처리나 디버깅에 어려움
## Python 3.3 yield from이 등장.
## Python 3.4 Asyncio 추가

# import asyncio
# import random
# import datetime
#
# @asyncio.coroutine ## 데코레이터로 구현된 코루틴.
# def print_time(idx) :
# sleep_time = random.randrange(1, 10)
# print(sleep_time)
# yield from asyncio.sleep(sleep_time)
# print("[%s] sleep time : %s, complete time : %s" % (idx, sleep_time, datetime.datetime.now()))
#
# def main() :
# futures = [print_time(i) for i in range(10)]
# loop = asyncio.get_event_loop()
# loop.run_until_complete(asyncio.wait(futures))
# loop.close()
#
# if __name__ == "__main__" :
# main()



(실행 결과)


# 4
# 5
# 4
# 8
# 8
# 2
# 5
# 7
# 3
# 2
# [5] sleep time : 2, complete time : 2020-08-30 18:50:31.073389
# [1] sleep time : 2, complete time : 2020-08-30 18:50:31.104254
# [7] sleep time : 3, complete time : 2020-08-30 18:50:32.100427
# [8] sleep time : 4, complete time : 2020-08-30 18:50:33.094911
# [9] sleep time : 4, complete time : 2020-08-30 18:50:33.095925
# [6] sleep time : 5, complete time : 2020-08-30 18:50:34.087446
# [2] sleep time : 5, complete time : 2020-08-30 18:50:34.087446
# [0] sleep time : 7, complete time : 2020-08-30 18:50:36.086021
# [3] sleep time : 8, complete time : 2020-08-30 18:50:37.095603
# [4] sleep time : 8, complete time : 2020-08-30 18:50:37.096612




## Asyncio in Python 3.5
## async await 문법 추가. async = @asyncio.coroutine, await = yield from

# import asyncio
# import random
# import datetime
#
# async def print_time(idx) :
# sleep_time = random.randrange(1, 10)
# print(sleep_time)
# await asyncio.sleep(sleep_time)
# print("[%s] sleep time : %s, complete time : %s" % (idx, sleep_time, datetime.datetime.now()))
#
# def main() :
# futures = [print_time(i) for i in range(10)]
# loop = asyncio.get_event_loop()
# loop.run_until_complete(asyncio.wait(futures))
# loop.close()
#
# if __name__ == "__main__" :
# main()



(실행 결과)


# 5
# 4
# 4
# 9
# 5
# 6
# 5
# 3
# 9
# 9
# [0] sleep time : 3, complete time : 2020-08-30 19:02:12.860910
# [9] sleep time : 4, complete time : 2020-08-30 19:02:13.848743
# [2] sleep time : 4, complete time : 2020-08-30 19:02:13.848743
# [6] sleep time : 5, complete time : 2020-08-30 19:02:14.853861
# [3] sleep time : 5, complete time : 2020-08-30 19:02:14.853861
# [8] sleep time : 5, complete time : 2020-08-30 19:02:14.854858
# [5] sleep time : 6, complete time : 2020-08-30 19:02:15.847032
# [4] sleep time : 9, complete time : 2020-08-30 19:02:18.858229
# [7] sleep time : 9, complete time : 2020-08-30 19:02:18.859240
# [1] sleep time : 9, complete time : 2020-08-30 19:02:18.861211




# import asyncio
#
# class AsynchronousReader :
# def __init__(self, file_name):
# self.file_name = file_name
# self.file = None
#
# try :
# self.file = open(self.file_name, "rb")
# except :
# print("file open error")
#
# def __aiter__(self):
# return self
#
# async def __anext__(self):
# value = await self.file_readline()
# if value == b"":
# raise StopAsyncIteration
# return value.decode("utf-8").strip()
#
# async def file_readline(self):
# return self.file.readline()
#
# def file_close(self) :
# self.file.close()
#
# async def read_file(file_name) :
# async_reader = AsynchronousReader(file_name)
# async for value in async_reader:
# print(value)
# async_reader.file_close()
#
# if __name__ =="__main__" :
# loop = asyncio.get_event_loop()
# try :
# loop.run_until_complete(read_file("./python_foundation_mission_statement"))
# finally :
# loop.close()



(실행 결과)


# the mission of the python software foundation is to promote, protect,
# and advance the python programming language, and to support and
# facilitate the growth of a diverse and international community of
# python programmers.
#
# from the mission statement page




# import asyncio
#
# class AsynchronousReader :
# def __init__(self, file_name):
# self.file_name = file_name
# self.file = None
#
# async def __aenter__(self):
# try :
# self.file = open(self.file_name, "rb")
# except :
# print("file open error")
# raise Exception
# else:
# return self.file
#
# async def __aexit__(self, exc_type, exc_value, traceback):
# self.file.close()
#
# async def read_file(file_name) :
# async with AsynchronousReader(file_name) as af:
# for line in af.readlines() :
# print(line.decode("utf-8").strip())
#
# if __name__ == "__main__" :
# loop = asyncio.get_event_loop()
# try :
# loop.run_until_complete(read_file("./python_foundation_mission_statement"))
# finally :
# loop.close()



(실행 결과)


# the mission of the python software foundation is to promote, protect,
# and advance the python programming language, and to support and
# facilitate the growth of a diverse and international community of
# python programmers.
#
# from the mission statement page




## Asyncio in Python 3.6
## native 코루틴 안에서도 yield yield from 사용하도록 개선.이로써 native 코루틴으로 generator를 만들 수 있음.

# import asyncio
#
# async def delay_range(to, delay = 1) :
# for i in range(to) :
# yield i
# await asyncio.sleep(delay)
#
# async def run() :
# async for i in delay_range(10) :
# print(i)
#
# if __name__ =="__main__" :
# loop = asyncio.get_event_loop()
# try :
# loop.run_until_complete(run())
# finally :
# loop.close()



(실행 결과)


# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9




# import asyncio
#
# async def delay_range(to, delay = 1) :
# for i in range(to) :
# yield i
# await asyncio.sleep(delay)
#
# async def run() :
# print("async comprehension")
# return [i async for i in delay_range(3)]
#
# async def run_multiple() :
# print("async await comprehension")
# func_list = [run, run]
# result = [await func() for func in func_list]
# print(result)
#
# if __name__ =="__main__" :
# loop = asyncio.get_event_loop()
# try :
# loop.run_until_complete(run_multiple())
# finally :
# loop.close()



(실행 결과)


# async await comprehension
# async comprehension
# async comprehension
# [[0, 1, 2], [0, 1, 2]]




## Asyncio in Python 3.7, 3.8
## asyncio를 이해하는데 필요한 세가지 개념
## event loop, future, task
## event loop - 대부분의 비동기 로직에는 각자의 event loop가 있다. 비동기 함수를 예약해서 작업 관리
## future - concurrents.futures와 같은 역할.asyncio에서는 작업관리를 task기반으로 한다.future는 향후 작업을 의미.

# import asyncio
# import datetime
#
# async def func(caller) :
# print("start %s" % caller)
# await asyncio.sleep(3)
# print("end %s" % caller)
# return "done"
#
# async def coro() :
# c = func("coro")
# print(c)
# print(dir(c))
# ret = await c
# print("coro ret : %s" % ret)
#
# async def task() :
# t = asyncio.ensure_future(func("task"))
# print(t)
# print(dir(t))
# ret = await t
# print("task ret : %s" % ret)
#
# def callback(future) :
# print("task callback")
#
# def main() :
# loop = asyncio.get_event_loop()
# loop.run_until_complete(coro())
# loop.run_until_complete(task())
# loop.close()
#
# if __name__ =="__main__" :
# main()



(실행 결과)


# <coroutine object func at 0x0000026A9C8AF6D0>
# ['__await__', '__class__', '__del__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
# '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '
# __le__', '__lt__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__',
# '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'cr_await', 'cr_code', 'cr_frame', 'cr_running',
# 'send', 'throw']
# start coro
# end coro
# coro ret : done
# <Task pending coro=<func() running at C:/PythonProject/autobuy/test4.py:246>>
# ['__await__', '__class__', '__del__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
# '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '
# __iter__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
# '__sizeof__', '__str__', '__subclasshook__', '_asyncio_future_blocking', '_callbacks', '_coro', '_exception',
# '_fut_waiter', '_log_destroy_pending', '_log_traceback', '_loop', '_must_cancel', '_repr_info', '_result',
# '_schedule_callbacks', '_source_traceback', '_state', '_step', '_wakeup', 'add_done_callback', 'all_tasks',
# 'cancel', 'cancelled', 'current_task', 'done', 'exception', 'get_stack', 'print_stack', 'remove_done_callback',
# 'result', 'set_exception', 'set_result']
# start task
# end task
# task ret : done




# import asyncio
# import random
# import datetime
#
# async def print_time(idx) :
# sleep_time = random.randrange(1, 5)
# print(sleep_time)
# await asyncio.sleep(sleep_time)
# print("[%s] sleep time : %s, complete time : %s" % (idx, sleep_time, datetime.datetime.now()))
# return idx
#
# async def tasks() :
# task_list = [asyncio.ensure_future(print_time(i)) for i in range(10)]
# for idx, task in enumerate(task_list) :
# if idx % 2 == 0 :
# task.cancel()
# print("[%s] task is cancelled" % idx)
# else :
# task.add_done_callback(callback)
# await asyncio.wait(task_list)
#
# def callback(task) :
# print("[%s] call callback func" % task.result())
#
# def main() :
# loop = asyncio.get_event_loop()
# loop.run_until_complete(tasks())
# loop.close()
#
# if __name__ == "__main__" :
# main()



(실행 결과)


# [0] task is cancelled
# [2] task is cancelled
# [4] task is cancelled
# [6] task is cancelled
# [8] task is cancelled
# 4
# 2
# 4
# 2
# 3
# [3] sleep time : 2, complete time : 2020-08-30 21:08:59.506249
# [7] sleep time : 2, complete time : 2020-08-30 21:08:59.507242
# [3] call callback func
# [7] call callback func
# [9] sleep time : 3, complete time : 2020-08-30 21:09:00.495617
# [9] call callback func
# [1] sleep time : 4, complete time : 2020-08-30 21:09:01.505610
# [5] sleep time : 4, complete time : 2020-08-30 21:09:01.506629
# [1] call callback func
# [5] call callback func




## 그외 파이선 모듈
## greenlet - 경량화된 코루틴 라이브러리
## Twisted - 웹 서버용 이벤트 중심의 네트워킹 엔진
## Tornado - 빠른 응답성이 장점.
## PP - Parellel Python의 약자. 비동기적 처리는 아니나 병렬성을 활용하여 작업 효율성을 높인다.
# import greenlet
#
# def worker1() :
# print("enter the work1 funcion")
# gr2.switch()
# print("exit the work1 function")
#
# def worker2() :
# print("enter the work1 funcion")
# gr1.switch()
# print("exit the work1 function")
#
# if __name__ == "__main__" :
# gr1 = greenlet.greenlet(worker1)
# gr2 = greenlet.greenlet(worker2)
# gr1.switch()



(실행 결과)


# enter the work1 funcion
# enter the work1 funcion
# exit the work1 function




# import random
# import gevent
#
# def worker(index) :
# print("[%s] enter the work function" % index)
# gevent.sleep(random.randrange(1,5))
# print("[%s] exit the work function" % index)
#
# if __name__ == "__main__" :
# workers = [gevent.spawn(worker, i) for i in range(10)]
# gevent.joinall(workers)



(실행 결과)


# [0] enter the work function
# [1] enter the work function
# [2] enter the work function
# [3] enter the work function
# [4] enter the work function
# [5] enter the work function
# [6] enter the work function
# [7] enter the work function
# [8] enter the work function
# [9] enter the work function
# [5] exit the work function
# [7] exit the work function
# [1] exit the work function
# [6] exit the work function
# [8] exit the work function
# [9] exit the work function
# [0] exit the work function
# [2] exit the work function
# [3] exit the work function
# [4] exit the work function



+ Recent posts