diff --git a/module10/MODULE_10.md b/module10/MODULE_10.md new file mode 100644 index 0000000..6e2e76b --- /dev/null +++ b/module10/MODULE_10.md @@ -0,0 +1,20 @@ +# Module 10: Multithreading and Multiprocessing + +## Module Description +This is module 10. + + +--- + +# TODO List + +- [x] Create a directory for module 10. +- [x] Create pull request from 'module10' branch to 'master' branch +- [x] Add homeworks + - [ ] Create a new branch from 'module10' branch + - [ ] Create a corresponding directory for the homework + - [ ] Add homework files to the directory + - [ ] Create a pull request from 'hw*' branch to 'module10' branch + - [ ] After checkup with instructor merge pull request +- [ ] Add homework descriptions to MODULE_10.md +- [ ] Merge pull request \ No newline at end of file diff --git a/module10/hw1/example1.txt b/module10/hw1/example1.txt new file mode 100644 index 0000000..f6c6e7f --- /dev/null +++ b/module10/hw1/example1.txt @@ -0,0 +1,10 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 diff --git a/module10/hw1/example2.txt b/module10/hw1/example2.txt new file mode 100644 index 0000000..f0bfd07 --- /dev/null +++ b/module10/hw1/example2.txt @@ -0,0 +1,30 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 diff --git a/module10/hw1/example3.txt b/module10/hw1/example3.txt new file mode 100644 index 0000000..1bdb5d6 --- /dev/null +++ b/module10/hw1/example3.txt @@ -0,0 +1,200 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 +Какое-то слово № 31 +Какое-то слово № 32 +Какое-то слово № 33 +Какое-то слово № 34 +Какое-то слово № 35 +Какое-то слово № 36 +Какое-то слово № 37 +Какое-то слово № 38 +Какое-то слово № 39 +Какое-то слово № 40 +Какое-то слово № 41 +Какое-то слово № 42 +Какое-то слово № 43 +Какое-то слово № 44 +Какое-то слово № 45 +Какое-то слово № 46 +Какое-то слово № 47 +Какое-то слово № 48 +Какое-то слово № 49 +Какое-то слово № 50 +Какое-то слово № 51 +Какое-то слово № 52 +Какое-то слово № 53 +Какое-то слово № 54 +Какое-то слово № 55 +Какое-то слово № 56 +Какое-то слово № 57 +Какое-то слово № 58 +Какое-то слово № 59 +Какое-то слово № 60 +Какое-то слово № 61 +Какое-то слово № 62 +Какое-то слово № 63 +Какое-то слово № 64 +Какое-то слово № 65 +Какое-то слово № 66 +Какое-то слово № 67 +Какое-то слово № 68 +Какое-то слово № 69 +Какое-то слово № 70 +Какое-то слово № 71 +Какое-то слово № 72 +Какое-то слово № 73 +Какое-то слово № 74 +Какое-то слово № 75 +Какое-то слово № 76 +Какое-то слово № 77 +Какое-то слово № 78 +Какое-то слово № 79 +Какое-то слово № 80 +Какое-то слово № 81 +Какое-то слово № 82 +Какое-то слово № 83 +Какое-то слово № 84 +Какое-то слово № 85 +Какое-то слово № 86 +Какое-то слово № 87 +Какое-то слово № 88 +Какое-то слово № 89 +Какое-то слово № 90 +Какое-то слово № 91 +Какое-то слово № 92 +Какое-то слово № 93 +Какое-то слово № 94 +Какое-то слово № 95 +Какое-то слово № 96 +Какое-то слово № 97 +Какое-то слово № 98 +Какое-то слово № 99 +Какое-то слово № 100 +Какое-то слово № 101 +Какое-то слово № 102 +Какое-то слово № 103 +Какое-то слово № 104 +Какое-то слово № 105 +Какое-то слово № 106 +Какое-то слово № 107 +Какое-то слово № 108 +Какое-то слово № 109 +Какое-то слово № 110 +Какое-то слово № 111 +Какое-то слово № 112 +Какое-то слово № 113 +Какое-то слово № 114 +Какое-то слово № 115 +Какое-то слово № 116 +Какое-то слово № 117 +Какое-то слово № 118 +Какое-то слово № 119 +Какое-то слово № 120 +Какое-то слово № 121 +Какое-то слово № 122 +Какое-то слово № 123 +Какое-то слово № 124 +Какое-то слово № 125 +Какое-то слово № 126 +Какое-то слово № 127 +Какое-то слово № 128 +Какое-то слово № 129 +Какое-то слово № 130 +Какое-то слово № 131 +Какое-то слово № 132 +Какое-то слово № 133 +Какое-то слово № 134 +Какое-то слово № 135 +Какое-то слово № 136 +Какое-то слово № 137 +Какое-то слово № 138 +Какое-то слово № 139 +Какое-то слово № 140 +Какое-то слово № 141 +Какое-то слово № 142 +Какое-то слово № 143 +Какое-то слово № 144 +Какое-то слово № 145 +Какое-то слово № 146 +Какое-то слово № 147 +Какое-то слово № 148 +Какое-то слово № 149 +Какое-то слово № 150 +Какое-то слово № 151 +Какое-то слово № 152 +Какое-то слово № 153 +Какое-то слово № 154 +Какое-то слово № 155 +Какое-то слово № 156 +Какое-то слово № 157 +Какое-то слово № 158 +Какое-то слово № 159 +Какое-то слово № 160 +Какое-то слово № 161 +Какое-то слово № 162 +Какое-то слово № 163 +Какое-то слово № 164 +Какое-то слово № 165 +Какое-то слово № 166 +Какое-то слово № 167 +Какое-то слово № 168 +Какое-то слово № 169 +Какое-то слово № 170 +Какое-то слово № 171 +Какое-то слово № 172 +Какое-то слово № 173 +Какое-то слово № 174 +Какое-то слово № 175 +Какое-то слово № 176 +Какое-то слово № 177 +Какое-то слово № 178 +Какое-то слово № 179 +Какое-то слово № 180 +Какое-то слово № 181 +Какое-то слово № 182 +Какое-то слово № 183 +Какое-то слово № 184 +Какое-то слово № 185 +Какое-то слово № 186 +Какое-то слово № 187 +Какое-то слово № 188 +Какое-то слово № 189 +Какое-то слово № 190 +Какое-то слово № 191 +Какое-то слово № 192 +Какое-то слово № 193 +Какое-то слово № 194 +Какое-то слово № 195 +Какое-то слово № 196 +Какое-то слово № 197 +Какое-то слово № 198 +Какое-то слово № 199 +Какое-то слово № 200 diff --git a/module10/hw1/example4.txt b/module10/hw1/example4.txt new file mode 100644 index 0000000..7f58843 --- /dev/null +++ b/module10/hw1/example4.txt @@ -0,0 +1,100 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 +Какое-то слово № 31 +Какое-то слово № 32 +Какое-то слово № 33 +Какое-то слово № 34 +Какое-то слово № 35 +Какое-то слово № 36 +Какое-то слово № 37 +Какое-то слово № 38 +Какое-то слово № 39 +Какое-то слово № 40 +Какое-то слово № 41 +Какое-то слово № 42 +Какое-то слово № 43 +Какое-то слово № 44 +Какое-то слово № 45 +Какое-то слово № 46 +Какое-то слово № 47 +Какое-то слово № 48 +Какое-то слово № 49 +Какое-то слово № 50 +Какое-то слово № 51 +Какое-то слово № 52 +Какое-то слово № 53 +Какое-то слово № 54 +Какое-то слово № 55 +Какое-то слово № 56 +Какое-то слово № 57 +Какое-то слово № 58 +Какое-то слово № 59 +Какое-то слово № 60 +Какое-то слово № 61 +Какое-то слово № 62 +Какое-то слово № 63 +Какое-то слово № 64 +Какое-то слово № 65 +Какое-то слово № 66 +Какое-то слово № 67 +Какое-то слово № 68 +Какое-то слово № 69 +Какое-то слово № 70 +Какое-то слово № 71 +Какое-то слово № 72 +Какое-то слово № 73 +Какое-то слово № 74 +Какое-то слово № 75 +Какое-то слово № 76 +Какое-то слово № 77 +Какое-то слово № 78 +Какое-то слово № 79 +Какое-то слово № 80 +Какое-то слово № 81 +Какое-то слово № 82 +Какое-то слово № 83 +Какое-то слово № 84 +Какое-то слово № 85 +Какое-то слово № 86 +Какое-то слово № 87 +Какое-то слово № 88 +Какое-то слово № 89 +Какое-то слово № 90 +Какое-то слово № 91 +Какое-то слово № 92 +Какое-то слово № 93 +Какое-то слово № 94 +Какое-то слово № 95 +Какое-то слово № 96 +Какое-то слово № 97 +Какое-то слово № 98 +Какое-то слово № 99 +Какое-то слово № 100 diff --git a/module10/hw1/example5.txt b/module10/hw1/example5.txt new file mode 100644 index 0000000..f6c6e7f --- /dev/null +++ b/module10/hw1/example5.txt @@ -0,0 +1,10 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 diff --git a/module10/hw1/example6.txt b/module10/hw1/example6.txt new file mode 100644 index 0000000..f0bfd07 --- /dev/null +++ b/module10/hw1/example6.txt @@ -0,0 +1,30 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 diff --git a/module10/hw1/example7.txt b/module10/hw1/example7.txt new file mode 100644 index 0000000..1bdb5d6 --- /dev/null +++ b/module10/hw1/example7.txt @@ -0,0 +1,200 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 +Какое-то слово № 31 +Какое-то слово № 32 +Какое-то слово № 33 +Какое-то слово № 34 +Какое-то слово № 35 +Какое-то слово № 36 +Какое-то слово № 37 +Какое-то слово № 38 +Какое-то слово № 39 +Какое-то слово № 40 +Какое-то слово № 41 +Какое-то слово № 42 +Какое-то слово № 43 +Какое-то слово № 44 +Какое-то слово № 45 +Какое-то слово № 46 +Какое-то слово № 47 +Какое-то слово № 48 +Какое-то слово № 49 +Какое-то слово № 50 +Какое-то слово № 51 +Какое-то слово № 52 +Какое-то слово № 53 +Какое-то слово № 54 +Какое-то слово № 55 +Какое-то слово № 56 +Какое-то слово № 57 +Какое-то слово № 58 +Какое-то слово № 59 +Какое-то слово № 60 +Какое-то слово № 61 +Какое-то слово № 62 +Какое-то слово № 63 +Какое-то слово № 64 +Какое-то слово № 65 +Какое-то слово № 66 +Какое-то слово № 67 +Какое-то слово № 68 +Какое-то слово № 69 +Какое-то слово № 70 +Какое-то слово № 71 +Какое-то слово № 72 +Какое-то слово № 73 +Какое-то слово № 74 +Какое-то слово № 75 +Какое-то слово № 76 +Какое-то слово № 77 +Какое-то слово № 78 +Какое-то слово № 79 +Какое-то слово № 80 +Какое-то слово № 81 +Какое-то слово № 82 +Какое-то слово № 83 +Какое-то слово № 84 +Какое-то слово № 85 +Какое-то слово № 86 +Какое-то слово № 87 +Какое-то слово № 88 +Какое-то слово № 89 +Какое-то слово № 90 +Какое-то слово № 91 +Какое-то слово № 92 +Какое-то слово № 93 +Какое-то слово № 94 +Какое-то слово № 95 +Какое-то слово № 96 +Какое-то слово № 97 +Какое-то слово № 98 +Какое-то слово № 99 +Какое-то слово № 100 +Какое-то слово № 101 +Какое-то слово № 102 +Какое-то слово № 103 +Какое-то слово № 104 +Какое-то слово № 105 +Какое-то слово № 106 +Какое-то слово № 107 +Какое-то слово № 108 +Какое-то слово № 109 +Какое-то слово № 110 +Какое-то слово № 111 +Какое-то слово № 112 +Какое-то слово № 113 +Какое-то слово № 114 +Какое-то слово № 115 +Какое-то слово № 116 +Какое-то слово № 117 +Какое-то слово № 118 +Какое-то слово № 119 +Какое-то слово № 120 +Какое-то слово № 121 +Какое-то слово № 122 +Какое-то слово № 123 +Какое-то слово № 124 +Какое-то слово № 125 +Какое-то слово № 126 +Какое-то слово № 127 +Какое-то слово № 128 +Какое-то слово № 129 +Какое-то слово № 130 +Какое-то слово № 131 +Какое-то слово № 132 +Какое-то слово № 133 +Какое-то слово № 134 +Какое-то слово № 135 +Какое-то слово № 136 +Какое-то слово № 137 +Какое-то слово № 138 +Какое-то слово № 139 +Какое-то слово № 140 +Какое-то слово № 141 +Какое-то слово № 142 +Какое-то слово № 143 +Какое-то слово № 144 +Какое-то слово № 145 +Какое-то слово № 146 +Какое-то слово № 147 +Какое-то слово № 148 +Какое-то слово № 149 +Какое-то слово № 150 +Какое-то слово № 151 +Какое-то слово № 152 +Какое-то слово № 153 +Какое-то слово № 154 +Какое-то слово № 155 +Какое-то слово № 156 +Какое-то слово № 157 +Какое-то слово № 158 +Какое-то слово № 159 +Какое-то слово № 160 +Какое-то слово № 161 +Какое-то слово № 162 +Какое-то слово № 163 +Какое-то слово № 164 +Какое-то слово № 165 +Какое-то слово № 166 +Какое-то слово № 167 +Какое-то слово № 168 +Какое-то слово № 169 +Какое-то слово № 170 +Какое-то слово № 171 +Какое-то слово № 172 +Какое-то слово № 173 +Какое-то слово № 174 +Какое-то слово № 175 +Какое-то слово № 176 +Какое-то слово № 177 +Какое-то слово № 178 +Какое-то слово № 179 +Какое-то слово № 180 +Какое-то слово № 181 +Какое-то слово № 182 +Какое-то слово № 183 +Какое-то слово № 184 +Какое-то слово № 185 +Какое-то слово № 186 +Какое-то слово № 187 +Какое-то слово № 188 +Какое-то слово № 189 +Какое-то слово № 190 +Какое-то слово № 191 +Какое-то слово № 192 +Какое-то слово № 193 +Какое-то слово № 194 +Какое-то слово № 195 +Какое-то слово № 196 +Какое-то слово № 197 +Какое-то слово № 198 +Какое-то слово № 199 +Какое-то слово № 200 diff --git a/module10/hw1/example8.txt b/module10/hw1/example8.txt new file mode 100644 index 0000000..7f58843 --- /dev/null +++ b/module10/hw1/example8.txt @@ -0,0 +1,100 @@ +Какое-то слово № 1 +Какое-то слово № 2 +Какое-то слово № 3 +Какое-то слово № 4 +Какое-то слово № 5 +Какое-то слово № 6 +Какое-то слово № 7 +Какое-то слово № 8 +Какое-то слово № 9 +Какое-то слово № 10 +Какое-то слово № 11 +Какое-то слово № 12 +Какое-то слово № 13 +Какое-то слово № 14 +Какое-то слово № 15 +Какое-то слово № 16 +Какое-то слово № 17 +Какое-то слово № 18 +Какое-то слово № 19 +Какое-то слово № 20 +Какое-то слово № 21 +Какое-то слово № 22 +Какое-то слово № 23 +Какое-то слово № 24 +Какое-то слово № 25 +Какое-то слово № 26 +Какое-то слово № 27 +Какое-то слово № 28 +Какое-то слово № 29 +Какое-то слово № 30 +Какое-то слово № 31 +Какое-то слово № 32 +Какое-то слово № 33 +Какое-то слово № 34 +Какое-то слово № 35 +Какое-то слово № 36 +Какое-то слово № 37 +Какое-то слово № 38 +Какое-то слово № 39 +Какое-то слово № 40 +Какое-то слово № 41 +Какое-то слово № 42 +Какое-то слово № 43 +Какое-то слово № 44 +Какое-то слово № 45 +Какое-то слово № 46 +Какое-то слово № 47 +Какое-то слово № 48 +Какое-то слово № 49 +Какое-то слово № 50 +Какое-то слово № 51 +Какое-то слово № 52 +Какое-то слово № 53 +Какое-то слово № 54 +Какое-то слово № 55 +Какое-то слово № 56 +Какое-то слово № 57 +Какое-то слово № 58 +Какое-то слово № 59 +Какое-то слово № 60 +Какое-то слово № 61 +Какое-то слово № 62 +Какое-то слово № 63 +Какое-то слово № 64 +Какое-то слово № 65 +Какое-то слово № 66 +Какое-то слово № 67 +Какое-то слово № 68 +Какое-то слово № 69 +Какое-то слово № 70 +Какое-то слово № 71 +Какое-то слово № 72 +Какое-то слово № 73 +Какое-то слово № 74 +Какое-то слово № 75 +Какое-то слово № 76 +Какое-то слово № 77 +Какое-то слово № 78 +Какое-то слово № 79 +Какое-то слово № 80 +Какое-то слово № 81 +Какое-то слово № 82 +Какое-то слово № 83 +Какое-то слово № 84 +Какое-то слово № 85 +Какое-то слово № 86 +Какое-то слово № 87 +Какое-то слово № 88 +Какое-то слово № 89 +Какое-то слово № 90 +Какое-то слово № 91 +Какое-то слово № 92 +Какое-то слово № 93 +Какое-то слово № 94 +Какое-то слово № 95 +Какое-то слово № 96 +Какое-то слово № 97 +Какое-то слово № 98 +Какое-то слово № 99 +Какое-то слово № 100 diff --git a/module10/hw1/img.png b/module10/hw1/img.png new file mode 100644 index 0000000..df8ca22 Binary files /dev/null and b/module10/hw1/img.png differ diff --git a/module10/hw1/module_10_1.py b/module10/hw1/module_10_1.py new file mode 100644 index 0000000..2926c22 --- /dev/null +++ b/module10/hw1/module_10_1.py @@ -0,0 +1,78 @@ +# Домашнее задание по теме "Создание потоков". +""" +Задача "Потоковая запись в файлы": + +Необходимо создать функцию wite_words(word_count, file_name), где word_count - количество записываемых слов, +file_name - название файла, куда будут записываться слова. +Функция должна вести запись слов "Какое-то слово № <номер слова по порядку>" в соответствующий файл +с прерыванием после записи каждого на 0.1 секунду. +Сделать паузу можно при помощи функции sleep из модуля time, +предварительно импортировав её: from time import sleep. +В конце работы функции вывести строку "Завершилась запись в файл <название файла>". + +После создания файла вызовите 4 раза функцию wite_words, передав в неё следующие значения: + 1. 10, example1.txt + 2. 30, example2.txt + 3. 200, example3.txt + 4. 100, example4.txt + +После вызовов функций создайте 4 потока для вызова этой функции со следующими аргументами для функции: + 1. 10, example5.txt + 2. 30, example6.txt + 3. 200, example7.txt + 4. 100, example8.txt + +Запустите эти потоки методом start не забыв, сделать остановку основного потока при помощи join. +Также измерьте время затраченное на выполнение функций и потоков. +Как это сделать рассказано в лекции к домашнему заданию. +""" +import threading +from time import sleep, time + + +def write_words(word_count: int, file_name: str): + """ + Функция записывает указанное количество слов в файл с паузой 0.1 секунды между записями. + :param word_count: Количество слов для записи + :param file_name: Название файла для записи + """ + with open(file_name, 'w', encoding='utf-8') as file: + for i in range(1, word_count + 1): + file.write(f"Какое-то слово № {i}\n") + sleep(0.1) # пауза 0.1 секунды между записями + print(f"Завершилась запись в файл {file_name}") + + +# Последовательные вызовы функции +start_time = time() + +write_words(10, 'example1.txt') +write_words(30, 'example2.txt') +write_words(200, 'example3.txt') +write_words(100, 'example4.txt') + +end_time = time() +print(f"Время выполнения последовательных вызовов: {end_time - start_time:.2f} секунд") + + +# Параллельные вызовы функции с потоками +start_time = time() + +# Создание потоков +threads = [ + threading.Thread(target=write_words, args=(10, 'example5.txt')), + threading.Thread(target=write_words, args=(30, 'example6.txt')), + threading.Thread(target=write_words, args=(200, 'example7.txt')), + threading.Thread(target=write_words, args=(100, 'example8.txt')) +] + +# Запуск потоков +for thread in threads: + thread.start() + +# Ожидание завершения всех потоков +for thread in threads: + thread.join() + +end_time = time() +print(f"Время выполнения многопоточных вызовов: {end_time - start_time:.2f} секунд") diff --git a/module10/hw2/img.png b/module10/hw2/img.png new file mode 100644 index 0000000..0854a94 Binary files /dev/null and b/module10/hw2/img.png differ diff --git a/module10/hw2/module_10_2.py b/module10/hw2/module_10_2.py new file mode 100644 index 0000000..fa98fe6 --- /dev/null +++ b/module10/hw2/module_10_2.py @@ -0,0 +1,75 @@ +# Домашнее задание по теме "Потоки на классах" +""" +Задача "За честь и отвагу!": + +Создайте класс Knight, наследованный от Thread, объекты которого будут обладать следующими свойствами: + 1. Атрибут name - имя рыцаря. (str) + 2. Атрибут power - сила рыцаря. (int) + +А также метод run, в котором рыцарь будет сражаться с врагами: + 1. При запуске потока должна выводится надпись "<Имя рыцаря>, на нас напали!". + 2. Рыцарь сражается до тех пор, пока не повергнет всех врагов (у всех потоков их 100). + 3. В процессе сражения количество врагов уменьшается на power текущего рыцаря. + 4. По прошествию 1 дня сражения (1 секунды) выводится строка + "<Имя рыцаря> сражается <кол-во дней>..., осталось <кол-во воинов> воинов." + 5. После победы над всеми врагами выводится надпись + "<Имя рыцаря> одержал победу спустя <кол-во дней> дней(дня)!" + +Как можно заметить нужно сделать задержку в 1 секунду, инструменты для задержки выберите сами. + +Пункты задачи: + 1. Создайте класс Knight с соответствующими описанию свойствами. + 2. Создайте и запустите 2 потока на основе класса Knight. + 3. Выведите на экран строку об окончании битв. +""" +from threading import Thread +from time import sleep + + +class Knight(Thread): + """ + Класс описывающий рыцаря. Наследник класса Тред. + """ + total_enemies = 100 + + + def __init__(self, name: str, power: int): + super().__init__() + self.name: str = name + self.power: int = power + self.days_fought = 0 # счетчик дней сражений + + + def run(self): + print(f"{self.name}, на нас напали!") + + while self.total_enemies > 0: + # рыцарь сражается 1 день + sleep(1) # пауза 1 секунда + # уменьшаем кол-во врагов на силу рыцаря + self.total_enemies -= self.power + # увеличиваем кол-во дней сражения + self.days_fought += 1 + + # кол-во врагов не должно уходить в минус + if self.total_enemies < 0: + self.total_enemies = 0 + + # печать прогресса битвы + print(f"{self.name} сражается {self.days_fought} день(дня)..., осталось {self.total_enemies} воинов.") + + # объявление победы + print(f"{self.name} одержал победу спустя {self.days_fought} дней(дня)!") + + +# пример использования +# Создание класса +first_knight = Knight('Sir Lancelot', 10) +second_knight = Knight("Sir Galahad", 20) +# Запуск потоков и остановка текущего +first_knight.start() +second_knight.start() +first_knight.join() +second_knight.join() +# Вывод строки об окончании сражения +print("Все битвы закончились!") diff --git a/module10/hw4/img.png b/module10/hw4/img.png new file mode 100644 index 0000000..b4ea44c Binary files /dev/null and b/module10/hw4/img.png differ diff --git a/module10/hw4/module_10_4.py b/module10/hw4/module_10_4.py new file mode 100644 index 0000000..ffc54b4 --- /dev/null +++ b/module10/hw4/module_10_4.py @@ -0,0 +1,117 @@ +# Домашнее задание по теме "Очереди для обмена данными между потоками." +""" +Задача "Потоки гостей в кафе": +Необходимо имитировать ситуацию с посещением гостями кафе. +Создайте 3 класса: Table, Guest и Cafe. + +Класс Table: + 1. Объекты этого класса должны создаваться следующим способом - Table(1) + 2. Обладать атрибутами number - номер стола и guest - гость, который сидит за этим столом (по умолчанию None) + +Класс Guest: + 1. Должен наследоваться от класса Thread (быть потоком). + 2. Объекты этого класса должны создаваться следующим способом - Guest('Vasya'). + 3. Обладать атрибутом name - имя гостя. + 4. Обладать методом run, где происходит ожидание случайным образом от 3 до 10 секунд. + +Класс Cafe: + 1. Объекты этого класса должны создаваться следующим способом - Cafe(Table(1), Table(2),....) + 2. Обладать атрибутами queue - очередь (объект класса Queue) и tables - столы в этом кафе (любая коллекция). + 3. Обладать методами guest_arrival (прибытие гостей) и discuss_guests (обслужить гостей). + +Метод guest_arrival(self, *guests): + 1. Должен принимать неограниченное кол-во гостей (объектов класса Guest). + 2. Далее, если есть свободный стол, то садить гостя за стол (назначать столу guest), + запускать поток гостя и выводить на экран строку "<имя гостя> сел(-а) за стол номер <номер стола>". + 3. Если же свободных столов для посадки не осталось, + то помещать гостя в очередь queue и выводить сообщение "<имя гостя> в очереди". + +Метод discuss_guests(self): Этот метод имитирует процесс обслуживания гостей. + 1. Обслуживание должно происходить пока очередь не пустая (метод empty) или хотя бы один стол занят. + 2. Если за столом есть гость(поток) и гость(поток) закончил приём пищи(поток завершил работу - метод is_alive), + то вывести строки "<имя гостя за текущим столом> покушал(-а) и ушёл(ушла)" и "Стол номер <номер стола> свободен". + Так же текущий стол освобождается (table.guest = None). + 3. Если очередь ещё не пуста (метод empty) и стол один из столов освободился (None), + то текущему столу присваивается гость взятый из очереди (queue.get()). + Далее выводится строка "<имя гостя из очереди> вышел(-ла) из очереди и сел(-а) за стол номер <номер стола>" + 4. Далее запустить поток этого гостя (start) + +Таким образом мы получаем 3 класса на основе которых имитируется работа кафе: + 1. Table - стол, хранит информацию о находящемся за ним гостем (Guest). + 2. Guest - гость, поток, при запуске которого происходит задержка от 3 до 10 секунд. + 3. Cafe - кафе, в котором есть определённое кол-во столов и происходит имитация прибытия гостей (guest_arrival) + и их обслуживания (discuss_guests). +""" +from queue import Queue +from random import randint +from threading import Thread +from time import sleep + + +class Table: + def __init__(self, number: int): + self.number = number + self.guest = None + + +class Guest(Thread): + def __init__(self, name: str): + super().__init__() + self.name = name + + + def run(self): + time_to_eat = randint(3, 10) + sleep(time_to_eat) + + +class Cafe: + def __init__(self, *tables): + self.queue = Queue() + self.tables = list(tables) + + + def guest_arrival(self, *guests: list[Guest]): + for guest in guests: + available_table = next((table for table in self.tables if table.guest is None), None) + if available_table: + available_table.guest = guest + guest.start() + print(f"{guest.name} сел(-а) за стол номер {available_table.number}") + else: + self.queue.put(guest) + print(f"{guest.name} в очереди") + + + def discuss_guests(self): + while not self.queue.empty() or any(table.guest for table in self.tables): + for table in self.tables: + if table.guest and not table.guest.is_alive(): + print(f"{table.guest.name} покушал(-а) и ушел(ушла)") + print(f"Стол номер {table.number} свободен") + table.guest = None + + if not self.queue.empty(): + next_guest = self.queue.get() + table.guest = next_guest + next_guest.start() + print(f"{next_guest.name} вышел(-ла) из очереди и сел(-а) за стол номер {table.number}") + sleep(1) + + +# пример использования +# создание столов +tables = [Table(number) for number in range(1, 6)] +# имена гостей +guest_names = [ + 'Maria', 'Oleg', 'Vakhtang', 'Sergey', 'Darya', 'Arman', + 'Victoria', 'Nikita', 'Galina', 'Pavel', 'Ilya', 'Alexandra' +] +# создание гостей +guests = [Guest(name) for name in guest_names] +# заполнение кафе столами +cafe = Cafe(*tables) +# прием гостей +cafe.guest_arrival(*guests) +# обслуживание гостей +cafe.discuss_guests() diff --git a/module10/hw5/linear.png b/module10/hw5/linear.png new file mode 100644 index 0000000..69d4668 Binary files /dev/null and b/module10/hw5/linear.png differ diff --git a/module10/hw5/module_10_5.py b/module10/hw5/module_10_5.py new file mode 100644 index 0000000..b4f33dd --- /dev/null +++ b/module10/hw5/module_10_5.py @@ -0,0 +1,68 @@ +# Домашнее задание по теме "Многопроцессное программирование" +""" +Задача "Многопроцессное считывание": + +Необходимо считать информацию из нескольких файлов одновременно, используя многопроцессный подход. + +Подготовка: + +Скачайте архив с файлами для считывания данных и распакуйте его в проект для дальнейшего использования. + +Выполнение: + +Создайте функцию read_info(name), где name - название файла. Функция должна: + 1. Создавать локальный список all_data. + 2. Открывать файл name для чтения. + 3. Считывать информацию построчно (readline), пока считанная строка не окажется пустой. + 4. Во время считывания добавлять каждую строку в список all_data. + +Этих операций достаточно, чтобы рассмотреть преимущество многопроцессного выполнения программы над линейным. + 1. Создайте список названий файлов в соответствии с названиями файлов архива. + 2. Вызовите функцию read_info для каждого файла по очереди (линейно) + и измерьте время выполнения и выведите его в консоль. + 3. Вызовите функцию read_info для каждого файла, + используя многопроцессный подход: контекстный менеджер with и объект Pool. + Для вызова функции используйте метод map, передав в него функцию read_info и список названий файлов. + Измерьте время выполнения и выведите его в консоль. + +Для избежания некорректного вывода запускайте линейный вызов и многопроцессный по отдельности, +предварительно закомментировав другой. +""" +import time +from multiprocessing import Pool + + +def read_info(name): + all_data = [] + with open(name, 'r') as file: + while True: + line = file.readline() + if not line: + break + all_data.append(line) + return print("============================\n" + f"\tfile {name} read\n" + "============================") + + +# пример использования +# p.s. файлы слишком большие для гит репозитория +if __name__ == "__main__": + # список файлов для чтения + file_names = [f"file {number}.txt" for number in range(1, 5)] + + # линейный вызов + start_time = time.time() + for file_name in file_names: + read_info(file_name) + linear_duration = time.time() - start_time + print(f"Время выполнения линейного вызова: {linear_duration:.6f} секунд") + + # закомментить блок выше для многопроцессного выполнения и раскомментить блок ниже + + # многопроцессный вызов функции + # start_time = time.time() + # with Pool() as pool: + # pool.map(read_info, file_names) + # parallel_duration = time.time() - start_time + # print(f"Время выполнения многопроцессного вызова: {parallel_duration:.6f} секунд") diff --git a/module10/hw5/parallel.png b/module10/hw5/parallel.png new file mode 100644 index 0000000..05ffa4d Binary files /dev/null and b/module10/hw5/parallel.png differ