Python言語のスレッドを使った例~サイコロを動かす~

このプログラミング言語、学びたいなっと思ったら岡山市のプログラミング教室 キュリオステーション岡山店へ相談を!! Python

大人の方で、Pythonというプログラミング言語に興味を持たれる方も多いです。

大学生さんとか、プログラミング言語で何か作ってくるように、っと課題が出るとか、、、

Python言語でサイコロを回すサンプルプログラム

プログラミング言語 Python でスレッド処理を試してみた。
Pythonというプログラミング言語で作ってみたいとのことで どこまで対応できるのか?簡単につくれる方法はないのか?など試してみた。 子ども向けの言語、Scratchだと並列処理的な、別タスク、別スレッド実行など 考慮しなくてもできるし JavaScriptやExcelなどでは、 別の方法でも可能なんだけどなぁ~...

 

「簡単だ!?」と言われているプログラミング言語、Pythonですが、どんなことができるのか?

実際に作りながら、試してみました。

 

プログラミング言語により得意なこと、苦手なことがります。

そんな相談もしながらプログラミングを楽しむ岡山市のプログラミング教室です。

 

Pythonで複数のスレッド実行できるのか?

岡山市のプログラミング教室 プログラミング例通常のプログラムは、シングルタスクで動きます。

一つの処理が終わってから、次の処理にといった感じです。

複数処理を同時に行うには、スレッド処理、別タスク、別プロセスで動かすといったプログラミングをする必要があります。

 

Python には、スレッド (threading)、スレッドプール (concurrent.futures)、プロセスプール (concurrent.futures)
といった複数の関数(モジュール)を実行できる機能(importで指定)が用意されていますので作るモノによって適用して下さい。

 

PythonでWindow画面を作る

まずは、画面を作るには?っと、ここから悩むかも知れませんね

作るイメージとしては、「Start」が押されると、画像をかえながら「Stop」ボタンが押されるのを待つ

画像の置き換えと、ループ処理中にイベントの受け取りです。

タイマーイベントなどを使用して多重タスクっぽくできるプログラミング言語もありますが、Pythonでは?

どうなるでしょう?

っというこで、試してみました。

ボタンの制御も確認してみます

ボタンの制御、「有効:押せる状態」とか、「無効:押せない状態」にできるのかな?

特に気にされない方もいますけど、

 

やはり、明確に使用できる。使用できない。

といった魅せ方ができるのか?

 

UI(画面構成)的にも解りやすくできるのかな?

の確認も含めてしてみました。

 

独学で学ぶなら→いちばんやさしい Python入門教室

実際にコーディングしたのは、こんな感じです。

import tkinter —–> 画面を作る
import random —–> 乱数
import time ——–> タイマー
import threading –> スレッド

ランダムな番号で画像を置き換える処理
def disp_img(i):
    if i==1 :
        panel.configure(image = image1)
        panel.image = image1
    if i==2 :
        panel.configure(image = image2)
        panel.image = image2
・・省略・・
    return

ランダムな番号で画像を置き換える処理
def roolet():
    while not event.is_set(): –> イベント発生まで
        i = random.randint(1,6) –> 乱数取得
        disp_img(i) –> 表示を変える
        time.sleep(0.3) –> 一定時間待つ
    return

ボタンが押されたときの処理
# clickイベント
def btn_click():
    t = threading.Thread(target=roolet) –> スレッド
    btn1.configure(state=tkinter.DISABLED) –> ボタン制御
    btn2.configure(state=tkinter.NORMAL)
    event.clear() –> イベントをクリア
    t.daemon=True
    t.start() –> スレッドの開始
    return
 
def btn_stop():
    btn2.configure(state=tkinter.DISABLED)
    btn1.configure(state=tkinter.NORMAL)
    event.set() –> イベントをセットする
    i = random.randint(1,6)
    disp_img(i) –> 最後の表示
    return
 
def btn_end():
    exit() –> 終了条件もなく強制終了
    return

# 画面作成
tki = tkinter.Tk()
tki.geometry(‘300×400’)
tki.title(‘サイコロ’)
 
image0 = tkinter.PhotoImage(file = ‘./images/s000.png’)
image1 = tkinter.PhotoImage(file = ‘./images/s001.png’)
・・省略・・
image6 = tkinter.PhotoImage(file = ‘./images/s006.png’)
 
panel = tkinter.Label(tki, image = image0)
panel.place(x=10, y=0)
panel.pack
 
# ボタン
btn1 = tkinter.Button(tki, width=7, text=’Start’, command=btn_click)
btn1.place(x=50, y=350)
btn1.configure(state=tkinter.NORMAL)
 
btn2 = tkinter.Button(tki, width=7, text=’Stop’, command=btn_stop)
btn2.place(x=120, y=350)
btn2.configure(state=tkinter.DISABLED)
 
btn3 = tkinter.Button(tki, width=7, text=’終わり’, command=btn_end)
btn3.place(x=190, y=350)
btn3.configure(state=tkinter.NORMAL)
 
event = threading.Event()
 
# 画面をそのまま表示
tki.mainloop()

スレッドで実行されるループ処理(画像を変える)の終了条件として、単純に、event がセットされたか?

といった条件にしています。

 

グローバル変数を使って試してみましたが、思い通りの動作にならなかったので、単純にevent.setのOn/Offを使用しました。

 

方法はいろいろありますので、まずは、正確に動くこと、そして、スマートに記述できれば、よいでしょう。
 

簡単なプログラミングなので、スレッドクラスを作らずに実装しましたが、 作るモノによっては、別のクラスモジュールを作って実装したほうがよいかも知れません。

 

エラー処理、終了時の条件なども組み込んでいませんので、製品として扱うのであれば、実装して下さい。

 

プログラミングは作るのが早い、遅いといった単純なスピード勝負ではありませんが、早く正確に作ることを心がけるとスキルアップしていきます。

 

Python言語を学びたい理由のひとつに、簡単だから?ということをよく聞きますが、プログラミングをはじめて学ぶ方にとっては、そんなに簡単なハズもないです

 

記述、コーディング量が少なくなるといった内容が「簡単」といったイメージになっているだけで、ロジック、手順は他のプログラミング言語で作ろうとも変わりません。

 

仕組み、使用する関数などは違いますが、機能は同じになることでしょう。

 

記述は違えど、完成品は同じということです。スマホのアプリケーションを使うのに、どのプログラミング言語で作っているか?など気にしませんよね

 

岡山市プログラミング教室 へ体験予約・相談する

お問い合わせ

 

岡山市北区のパソコン&プログラミング教室|こどもロボット&英語教室
岡山でパソコン・プログラミング教室、ロボット教室をお探しなら、岡山地域で「めっちゃ解りやすい説明ですネ」っとよく言われる岡山市北区のパソコン・プログラミング教室|こどもロボット教室&英語教室のキュリオステーション岡山店へ
岡山市北区のマンツーマン個別指導型パソコン教室
岡山でパソコン・プログラミング教室をお探しなら、「解りやすい説明でした」との感想が多い岡山市北区のパソコン・プログラミング教室【キュリオステーション岡山店】へ、気軽にスマホのことも相談できる教室です。無料体験・無料相談も随時しています。
岡山市北区のプログラミング教室「キュリオステーション岡山店」
岡山でパソコン・プログラミング教室をお探しなら、キュリオステーション岡山店へ、岡山地域で一番の問題解決力「私には解りやすかった」との感想が多い岡山市北区のプログラミング教室です。驚きの回答と効率よい学び方の相談などお気軽にお問い合わせを!!
岡山市北区のロボット教室&ロボットプログラミング教室【岡山表町教室】
岡山でロボット教室|ロボットプログラミング教室をお探しなら、岡山市で発想力と応用力を養う習い事と話題のヒューマンアカデミーロボット教室「岡山表町教室」へ。準備も片付けも自分で!普段見られない姿が見られるロボット教室
岡山市北区の恥ずかしがり屋な子ども向け英語|英会話教室
岡山でこども英語教室をお探しなら、岡山市北区のシャイで恥ずかしがり屋な子ども向け英語|英会話教室「ヒューマンアカデミーランゲージスクール岡山表町教室」へ、英会話スクールと英語塾のいいとこ取りの仕組みとなっています。気になりましたら無料体験をご予約下さい。
岡山市北区のパソコン教室「キュリオステーション岡山店」の料金設定
岡山でパソコン教室をお探しなら、気軽に相談できる教室と話題の安い料金設定も魅力的な岡山市北区のパソコン教室「キュリオステーション岡山店」へ、パソコン、スマホ、プログラミング、資格取得、学び方など、ちょっとした相談事など気軽に相談できる教室です。

 

 

タイトルとURLをコピーしました