- QT: c/c++언어 기반의 gui 라이브러리
- PyQT: QT와 다른 회사서 만듬
- PySide2: QT 회사에서 만듬
-------------------------------
from PySide2.QtWidgets import *
# 기본 절차: (1) 응용프로그램(App) 시작, (2) window 생성, (3) layout 생성,
# (4) 위젯(버턴, 라벨, ...) 만듬, (5) layout에 위젯 추가,
# (6) layout을 window에 넘김, (7) window 출력, (8) App 실행
app = QApplication([]) # 응용 프로그램 시작
window = QWidget() # window를 생성
layout = QVBoxLayout() # layout을 생성
button = QPushButton("I'm just a Button man") # button 하나 만듬
layout.addWidget(QLabel('Hello World!')) # label을 layout에 추가
layout.addWidget(button) # button을 layout에 추가
window.setLayout(layout) # layout을 window로 넘김
window.show() # window 화면 출력
app.exec_() # 응용 프로그램 실행
참고
1. Medium
*** SSH windows to ubuntu ***
답글삭제1. sudo apt-get install ssh
2. sudo service ssh start # Enable the SSH server service
3. sudo service ssh status # Check the SSH status
4. Download PUTTY on Windows: https://www.putty.org/
5. Install Putty to windows
6. Run and configure Putty
- IP address: 10.125.190.132
- Port: 22 (default port)
- SSH
7. Login to Ubuntu server via Putty SSH client
Reference:
1. How to login into Ubuntu using SSH from Windows 10/8/7:
https://www.how2shout.com/how-to/how-to-login-into-ubuntu-using-ssh-from-windows-10-8-7.html
*** FastAPI로 서비스 구축 ***
답글삭제- Ubuntu에 설치하고 uvicorn과 gunicorn으로 연결하고, nginx로 서비스하기
0. conda activate fastapi38
1. pip install fastapi
2. pip install uvicorn
3. nano main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"msg": "world"}
3. uvicorn main:app --reload # 서버 실행, reload: 코드 변경시 다시 로드
4. curl -X 'GET' 'http://10.125.190.132/' # 응답: {"msg":"world"}
5. sudo apt-get install -y --no-install-recommends tzdata git
6. sudo apt-get update
7. sudo apt-get install nginx
8. sudo systemctl start nginx
9. sudo chmod 775 /etc/nginx/sites-available
10. pip install gunicorn
11. gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log main:app --bind 0.0.0.0:8000 --workers 2 --daemon
12. sudo nano /etc/nginx/sites-available/fastapi.conf
server{
server_name 10.125.190.132;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
13. sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enabled/fastapi.conf
14. sudo nginx -t
15. sudo systemctl restart nginx
16. ps -ef | grep gunicorn
17. 원격지에서 크롬 띄우고
- 10.125.190.132 접속
- 10.125.190.132/docs 접속
Reference:
1. https://facerain.club/fast-api-tutorial-1/
2. https://facerain.club/fastapi-nginx/
curl 요청이 거절될 때:
삭제> netstat -ln | grep 8080
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN
8080 port에서 Listen 중인 뭔가 있는지를 체크할 수 있다.
모든 Listen상태를 다 볼려면
> sudo netstat -tulpn
*** FastAPI 서비스 및 확인 ***
삭제먼저 py파일 내에 아래와 같은 형태가 들어 있어야 함:
...
fastapi = FastAPI()
ray.init(address="auto", namespace="summarizer")
serve.start(detached=True)
...
실행:
>ray start --head
를 먼저 실행하고
>python filename.py # 코드 실행 여부 체크
또는
>gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log test6:app --bind 0.0.0.0:7995 --workers 2 --daemon # py파일을 uvicorn으로 api 서비스
로 실행
7995번으로 서비스되는게 있는지 체크해보기 위해서는
기존 것이 이 포트로 이미 서비스 되고 있으면 제거 후에 gunicorn을 실행해야 함.
>netstat -ln | grep 7995 # 7995번으로 열린(LISTEN) 포트가 있는지 체크
>sudo fuser -k 7995/tcp # 7995번으로 열린 port를 제거
>curl -X GET localhost:7995/ # 7995포트로 호출되는지 체크
chrome 열고 원격으로 접속해서 체크해 볼 수 있음:
10.125.190.132:7995/docs
*** NGINX 시작, 중지 ***
삭제sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
*** ray 실행 상태 확인 ***
삭제>ray start --head
>ray status
...
Usage:
2.0/16.0 CPU # num_replicas=2에 의해 core 2개 사용
0.0/2.0 GPU
0.0/1.0 accelerator_type:RTX
0.00/34.295 GiB memory
...
>ray stop # 모든 ray 실행 제거
## 절대 시간 측정 (network time protocal)
답글삭제pip install ntplib # 설치
> import ntplib
> from datetime import datetime, timezone
> c = ntplib.NTPClient()
> response = c.request('time.google.com')
> response.offset
0.5630807876586914
> dir(response)
['_PACKET_FORMAT', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'delay', 'dest_time', 'dest_timestamp', 'from_data', 'leap', 'mode', 'offset', 'orig_time', 'orig_timestamp', 'poll', 'precision', 'recv_time', 'recv_timestamp', 'ref_id', 'ref_time', 'ref_timestamp', 'root_delay', 'root_dispersion', 'stratum', 'to_data', 'tx_time', 'tx_timestamp', 'version']
> response.recv_time
1639731530.288301
> response = c.request('time.google.com')
> response.recv_time
1639732409.5878935
> response.recv_timestamp
3848721230.5001526
> response = c.request('time.google.com')
> response.recv_timestamp
3848721305.5317435
I like your article where you talked about many freelancing platforms provide good projects to unity game development developers with good pay according to their skills. I also know one of the platforms, Eiliana.com is a great platform; It’s a new yet great platform for technical experts.
답글삭제