jsup/avle 보팅 코드 갱신 - 1일1포스팅 강박에서 벗어나기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/jsup-avle-1-1 안녕하세요. @joviansummer입니다. @jsup과 @avle의 보팅 코드를 갱신하여 적용하였습니다. 검토는 상당히 오래전부터 진행해 왔습니다만, 최근에 구체적인 설계 방향이 잡히고 기술적으로 어떻게 할 것인지에 대해서도 결정이 되면서 생각보다 빠르게 코드 수정이 진행되었습니다. 새로운 기능은 신청자에 대해서 포스팅이 아니라 댓글에도 보팅을 하는 것입니다. 매일 포스팅하는 것이 부담스럽고 힘들다면 댓글을 달면 됩니다. 당연히 1일1포스팅보다 1일1댓글이 훨씬 쉽고, 댓글을 많이 쓴다고 나쁠 것도 없다고 생각됩니다. 임대 보팅을 받기 위해 억지로 매일 포스팅하는 것은 본인에게도 괴로운 일이고 포스팅 자체도 결국 저품질화될 가능성이 큽니다. 매일 포스팅하는 것이 즐거운 사용자들도 있겠습니다만, 단지 보팅 때문에 억지로 쥐어 짜서 하루에 하나씩 힘들게 포스팅하거나 사실상 내용이 없다시피 한 포스팅을 하는 사용자들도 있는 것이 현실입니다. 보팅을 받아야 한다는 압박감으로 매일 억지로 포스트를 쓰기 시작하면서 스팀잇은 재미 없고 따분한 곳이 되어 갑니다. 게다가 스팀잇의 트렌딩 페이지는 사실상 대량의 임대 셀프 보팅을 받는 사용자의 포스팅을 모아놓은 공간처럼 되어 있어, 이대로 계속 가면 SNS 본연의 매력은 상실하고 코인 채굴장 그 이상도 이하도 아니게 될까 우려되는 측면도 있습니다. 댓글 보팅이 이런 문제를 완화하는데 조금이나마 기여할 수 있지 않을까 생각됩니다. 대상: @jsup 또는 @avle에 스팀파워를 임대하여 보팅을 받고 있는 계정 신청 방법: @jsup 또는 @joviansummer의 최근 포스트에 "댓글 보팅을 신청합니다"라는 내용으로 댓글을 써 주시면 됩니다. 제가 확인하고 서버에 등록하면 다음날부터 해당 계정은 포스트/댓글 관계 없이 그날 처음 작성하...

파이썬에서 작업 실행에 시간제한(timeout) 설정하기 - signal.alarm()

by joviansummer
original STEEMIT post: https://steemit.com/blog/@joviansummer/timeout-signalalarm


파이썬에서 특정 작업을 실행할 때 일정 시간내에 완료되지 않으면 예외를 발생시킬 수 있습니다. 어떤 작업이 대해 시간을 제한하고 싶을 때 사용할 수 있겠습니다. try/except 구문과 signal.alarm() 함수를 이용합니다. 예제 코드는 아래와 같습니다.

import time
import signal
import traceback

# 알람 처리 함수
def alarm_handler(signum, frame):
  # 예외 발생시키기
  raise Exception("시간 초과")

# 루프 함수 (n초 동안 대기)
def loop_func(num):
  for i in range(num):
    print(i)
    time.sleep(1)

# alarm signal이 발생할 경우 처리할 함수 지정
signal.signal(signal.SIGALRM, alarm_handler)

try:
  # 5초 동안 작업이 완료되지 않으면 예외 발생
  signal.alarm(5)
  # 함수 호출
  loop_func(10)
except:
  print("예외 발생")
  traceback.print_exc

# 시간 제한 해제
signal.alarm(0) 

위의 예시를 보면 5초안에 작업이 완료되지 않으면 예외를 발생하도록 한 후, loop_func 함수를 호출하여 10초 동안 대기하도록 했습니다. 따라서 5초후에 예외가 발생하게 됩니다. 만약 예를 들어 3초 동안 대기하도록 loop_func 함수의 인자를 3으로 지정하여 호출했다면 예외 발생이 없이 정상적으로 완료될 것입니다.

여기서 유의할 점이 있는데, signal.alarm()에 대한 처리 함수를 만들고 이 함수를 이용해서 예외를 발생시키도록 해 주어야 합니다. 위의 코드에서는 alarm_handler() 함수를 만들고 signal.signal() 함수에서 해당 함수를 지정해 주었습니다. 이렇게 하지 않으면 알람이 발생하는 시점에서 프로그램이 그대로 종료되므로, 위와 같이 별도의 함수를 지정하여 예외를 발생시키도록 해 줍니다.

또 한가지 유의할 점이 있습니다. 시간제한을 적용하고 싶은 작업이 완료되었으면 시간 제한을 해제해 주어야 합니다. signal.alarm() 함수에서 인자를 0으로 지정하면 됩니다. 해제하지 않으면 이후 다른 작업을 진행하는 도중에 제한 시간이 만료되어 예외가 발생할 수 있습니다.

이와 관련된 문서는 아래의 링크에 있습니다.

https://docs.python.org/ko/3.8/library/signal.html

https://docs.python.org/3/library/signal.html


@joviansummer의 스팀 프로젝트

스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다.
(https://steemitwallet.com/~witnesses)

jswit 증인 노드 프로젝트를 시작합니다.

jsup 업보팅(upvoting) 서비스 소개

jsup 수혜자 지정 기능 추가

jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기

STEEM.NFT - 디지털 아트 보존 프로젝트

Posted through the AVLE Dapp (https://avle.io)

Comments

Popular posts from this blog

Nuitka - 파이썬 스크립트를 바이너리 실행 파일로 변환

[EN] STEEM-services: dapps/services webpage with sort and search functions

[ENG] jsup 2.0 - make your upvote great again